原型链
原理
每一个对象有一个__proto__
属性,指向构造函数的原型对象,构造函数的原型对象也是一个对象,也有__proto__
属性,这样一层一层往上找就形成了原型链。
teacher
是 Teacher
类创建的实例 teacher.__proto__ === Teacher.prototype
。前者称为隐式实例,后者为显式实例。
xxx.hasOwnProperty()
可以查看一个属性是否为对象本身拥有的,在其原型链上的不算是它本身的。hasOwnProperty
是 Object
原型上的方法,所以所有对象都可以用。
构造函数的 prototype
的 constructor
属性指向了构造函数
instanceof
A instanceof B
判断 A
是否为 B
的一个实例。若 B.prototype
在 A
的原型链上则返回 true
。例如上图中 Person.prototype
在 teacher
实例的原型链上,所以 teacher instanceof Person
返回 true
。
- 对象实例是由构造函数
new
出来的 - 函数可以
new
自己 Foo()
本来就是个函数,Function
作为构造函数可以new
出来
Object instanceof Function // true
Object instanceof Object // true
Function instanceof Object // true
Function instanceof Function // true
对于这四个,找到右侧的 prototype
如果顺着左边能连接到就返回 true