为了账号安全,请及时绑定邮箱和手机立即绑定

instanceof的疑问

instanceof的疑问

智慧大石 2018-12-19 19:15:07
在知乎看到帖子,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;//trueFunction.__proto__ === Function.prototype//trueFunction.__proto__ === Object.__proto__;//true
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-01-13
  • 1 回答
  • 0 关注
  • 472 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号