javascript - instanceof的疑问
本文介绍了javascript - instanceof的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在知乎看到帖子,a instanceof A的意义就是,对a,在其原型链查找(__proto__),如果找到A.prototype,就返回true。下面的代码有点不理解。
Function instanceof Object // true
Object instanceof Function // true
Function instanceof Function //true
Object instanceof Object // true
Number instanceof Number //false
其他测试(也不太理解)
Object.__proto__ === Function.prototype;//true
Function.__proto__ === Function.prototype//true
Function.__proto__ === Object.__proto__;//true
解决方案
js的类是基于原型链的
我说一下下面三个:
//假设你定义一个A函数:
var A = new Function();
//然后创建了一个A实例(对象)叫a:
var a = new A();
console.log(a instanceof A); //输出为true,A是A类的构造函数,a是A类的一个对象
//因为a和A都有一个原型对象,分别保存在它们不同的属性
console.log(a.__proto__ == A.prototype);
//同样Object也是一个构造函数,所以我们多了这样声明一个空对象的写法:
var o = new Object();
//既然Object是一个函数,那么就是Function的实例:
console.log(Object.__proto__ == Function.prototype); //true
console.log(Object instanceof Function); //true
//同理Function也是一个构造函数,所以有这么写:
//如上面的:var A = new Function(),于是:
console.log(Function.__proto__ == Function.prototype); //true
console.log(Function instanceof Function); //true
//所以:
console.log(Function.__proto__ == Object.__proto__); //true
//另外原型本身是个对象,即Function.prototype是对象:
Function.prototype.__proto__ == Object.prototype; //true
总结一下:
Object.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
Number.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype
这篇关于javascript - instanceof的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文