标签:复杂 var type属性 console 第一个 显示 构造函数 ceo prototype
instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上
obj instanceofObject;//true 实例obj在不在Object构造函数中
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
Person的原型在p的原型链中
functionPerson(){};
var p =new Person();
console.log(p instanceof Person);//true
Student和Person都在s的原型链中
functionPerson(){};
functionStudent(){};
var p =new Person();
Student.prototype=p;//继承原型var s=new Student();
console.log(s instanceof Student);//trueconsole.log(s instanceof Person);//true
这里的案例要有熟练的原型链的认识才能理解
function Person() {}
console.log(Object instanceof Object); //true
//第一个Object的原型链:Object=>
//Object.__proto__ => Function.prototype=>Function.prototype.__proto__=>Object.prototype
//第二个Object的原型:Object=> Object.prototype
console.log(Function instanceof Function); //true
//第一个Function的原型链:Function=>Function.__proto__ => Function.prototype
//第二个Function的原型:Function=>Function.prototype
console.log(Function instanceof Object); //true
//Function=>
//Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
//Object => Object.prototype
console.log(Person instanceof Function); //true
//Person=>Person.__proto__=>Function.prototype
//Function=>Function.prototype
console.log(String instanceof String); //false
//第一个String的原型链:String=>
//String.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
//第二个String的原型链:String=>String.prototype
console.log(Boolean instanceof Boolean); //false
//第一个Boolean的原型链:Boolean=>
//Boolean.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
//第二个Boolean的原型链:Boolean=>Boolean.prototype
console.log(Person instanceof Person); //false
//第一个Person的原型链:Person=>
//Person.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
//第二个Person的原型链:Person=>Person.prototype
对应上述规范做个函数模拟A instanceof B:
function_instanceof(A, B){
var O = B.prototype;// 取B的显示原型
A = A.__proto__;// 取A的隐式原型while (true) {
//Object.prototype.__proto__ === nullif (A === null)
returnfalse;
if (O === A)// 这里重点:当 O 严格等于 A 时,返回 truereturntrue;
A = A.__proto__;
}
}
标签:复杂 var type属性 console 第一个 显示 构造函数 ceo prototype
原文地址:https://www.cnblogs.com/ysk123/p/10006786.html