javascript - instanceof的疑问

查看:83
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆