威望0
积分7956
贡献0
在线时间763 小时
UID1
注册时间2021-4-14
最后登录2024-11-22
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7956
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-22
- 在线时间
- 763 小时
|
今天看到一个问题,问 Element instance Node 为什么是 false。
首先,我们知道 Element 是 Node 的子类,那么为什么 Element instanceof Node 是 false 呢?
Element 是一个构造函数,所以类型为 Function, Node 也是一个构造函数,所以类型也为 Function。
instanceof 这个关键字是用来判断 A 是否为 B 的实例。
[mw_shl_code=applescript,true]let arr = []
console.log(arr instanceof Array)[/mw_shl_code]
如上所示,控制台会打印出true,因为 arr 是 Array 的一个实例。
那么为何 Element instanceof Node 是 false 呢,因为 Element 是 Node 的子类,但不是它的实例。
[mw_shl_code=applescript,true]console.log(Element instanceof Node)<br>console.log(Element.__proto__ === Node)[/mw_shl_code]
显然,上面第一行为 false,第二行为 true。
我们来看一下 instanceof 方法如何运行的,写一下 instanceof 的实现代码。
[mw_shl_code=applescript,true]function myInstanceof(left, right) {
if (left && left.__proto__) {
if (left.__proto__ === right.prototype) {
return true
} else {
return myInstanceof(left.__proto__, right)
}
} else {
return false
}
}[/mw_shl_code]
看到 instanceof 的实现方式,是不是就明白 Element instanceof Node 为false了? |
上一篇:谈谈高并发系统的一些解决方案下一篇:趣谈网络协议
|