6.彻底搞懂 instance 和 typeOf
instanceof 运算符用来判断一个构造函数的 prototype 属性所指向的对象是否存在另外一个要检测对象的原型链上
描述
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
1.instanceof 作用是用来做检测类型
1、instanceof 可以检测某个对象是不是另一个对象的实例
var Person = function(){};
var student = new Person();
console.log (student instanceof Person); // true
2、instanceof 可以检测父类型
function Person(){};
function Student(){};
var p = new Person();
Student.prototype = p; // 继承原型
var s = new Student();
console.log(s instanceof Student); // true
console.log(s instanceof Person); // true
注意:instanceof 不适合检测一个对象本身的类型
instanceof 检测一个对象A是不是另一个对象的实例原理
查看对象B的 prototype 指向的对象是否在对象 A 的 [[prototype]] 链上,如果在,则返回 true,如果不在则返回 false,特殊情况,当对象的 prototype 为 null
将会报错。
函数模拟 A instanceof B
function _instanceof(A,B) {
var o = B.protrotype; // 取B的显示原型
A = A.__proto__; //取A的隐式原型
while(true) {
// Object.prototype.__proto__ === null
// 一直沿着原型链往上查找
if(A === null) {
return false;
}
if (o === A) {
return true;
}
A = A.__proto__;
}
}
总结
- 所有的构造器的 constructor 都指向 Function
- Function 的 prototype 指向一个特殊匿名函数,而这个特殊匿名函数的 proto 指向 Object.prototype
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论