instanceof 用于判断一个变量是否某个对象的实例。什么叫是某个对象的实例啊,这句话什么意思。。?
在JavaScript中,所谓的是某个对象的实例,并不像其他向面向对象语言那么严格。
当a instanceof Cons
的结果为true
时,只是说明
Cons.prototype
位于对象a
的原型链上
并不能说明a
这个对象是由构造函数Cons
new出来的。
举例:
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的一个实例
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
老规矩,先上例子:
person1
和person2
有着相同的属性,但又有不同的属性值,它们都是通过Person
构造出来的具有相似结构的对象,所以它们都是Person
的实例。通过Person()
构造函数我们可以创建出无数个类似的实例。为什么我们可以对引用类型使用像toString()
这样的方法?因为所有的引用类型都是Object
的实例。它们使用的toString()
来自Object
,确切的来说,来自Object
的原型。