前言
-
每个函数创建时都会有一个
prototype
属性,这个属性指向构造函数的原型对象 -
构造函数的实例有一个
[[prototype]]
指针指向构造函数的原型对象- 在脚本中没有标准的方式访问
[[Prototype]]
,但 Firefox、Safari 和 Chrome 在每个对象上都支持一个属性__proto__
- 可以使用
__proto__
属性代表[[Prototype]]
指针
- 在脚本中没有标准的方式访问
-
原型对象默认有一个
constructor
属性,指向与该原型对象相关联的构造函数。 -
三者关系示意图:
实现
-
instanceof
的作用:-
用来判断某个实例对象是否属于某构造函数
-
在继承关系中用来判断一个实例是否属于它的父类型或者祖先类型的实例
-
语法:
a instanceof b
-
结合原型的知识来解释就是:
instanceof
会遍历a的原型链,查找a.__proto__
是否跟b.prototype
指向同一个原型对象。查找成功返回true
,查找失败返回false
-
class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
}
function myInstanceOf(L, R){
let O = R.prototype;
L = L.__proto__;
while(L){
if (O === null) return false;
if (L === O) {
return true;
}
L = L.__proto__;
}
return false;
}
const person = new Person("zhangsan", 20);
console.log(myInstanceOf(person, Person)); // true