作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
function Foo() {}
function Bar() {}
Bar.prototype = new Foo()
console.log("Bar.prototype.constructor === Foo ? "
+ (Bar.prototype.constructor === Foo))
console.log("new Bar() instanceof Bar? "
+ (new Bar() instanceof Bar))
=> Bar.prototype.constructor === Foo ? true
=> new Bar() instanceof Bar? true
为什么“instanceof”的结果不是“false”,因为“constructor”指的不是自身而是继承的原型(prototype)?
最佳答案
instanceof
不使用 constructor
属性。它在内部调用函数对象的[HasInstance]
方法,这在§15.3.5.3 of the specification 中有描述。 .
它将对象的原型(prototype)(以及对象原型(prototype)的原型(prototype)等)与函数的 prototype
属性进行比较。
类似的实现是:
function myInstanceOf(obj, Constr) {
// get prototype of object
var proto = Object.getPrototypeOf(obj);
// climb up the prototype chain as long as we don't have a match
while (proto !== Constr.prototype && proto !== null) {
proto = Object.getPrototypeOf(proto);
}
return proto === Constr.prototype;
}
据我所知,constructor
属性不被任何内部方法使用,仅被用户生成的代码使用。
关于javascript - 令人困惑的 "instanceof "结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087977/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!