关于instanceof?

instanceof 用于判断一个变量是否某个对象的实例。什么叫是某个对象的实例啊,这句话什么意思。。?

阅读 3.2k
5 个回答

老规矩,先上例子:

function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person1 = new Person('xiaoming', 23);
var person2 = new Person('xiaohong', 25);

console.log(person1.name);    //xiaoming
console.log(person2.age);     //25

console.log(person1 instanceof Person);    //true
console.log(person2 instanceof Person);    //true
console.log(person1 instanceof Object);    //true
console.log(person2 instanceof Object);    //true

person1person2有着相同的属性,但又有不同的属性值,它们都是通过Person构造出来的具有相似结构的对象,所以它们都是Person的实例。通过Person()构造函数我们可以创建出无数个类似的实例。为什么我们可以对引用类型使用像toString()这样的方法?因为所有的引用类型都是Object的实例。它们使用的toString()来自Object,确切的来说,来自Object的原型。

在JavaScript中,所谓的是某个对象的实例,并不像其他向面向对象语言那么严格。

a instanceof Cons的结果为true时,只是说明

Cons.prototype位于对象a的原型链上

并不能说明a这个对象是由构造函数Consnew出来的。

举例:

function Student() {}
var s = new Student()

function Teacher() {}
Teacher.prototype = Student.prototype

s instanceof Teacher // 结果true
function Person(){
    this.name = "person";
}

var p = new Person();
p instanceof Person ? "p is an instance of Person" : "p isn't an instance of Person";

用于确定该对象是否是某个对象的子类。

比如:

var arr = []
arr instanceof Array
// true
arr instanceof String
// String

在面向对象语言中,一般会从一个模子中实例化出来一个对象(Object),或者叫实例(Instance),在JavaScript描述成一个变量是一个函数的实例或许会比较好理解一点。
但是一个函数是不是一个对象呢?一个函数应该是一个对象

function Person(){
    this.name = "person";
}

var p = new Person();
p instanceof Person ? "p is an instance of Person" : "p isn't an instance of Person";

Person instanceof Object; //true
Persion instanceof Function; //true

在上面的代码中可以看出p是Person(模子)的一个对象(实例)
而Person本身是一个函数对象,是对象Function的一个实例

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题