这个问题的答案:JavaScript 函数的原型属性的初始值是多少? https://stackoverflow.com/questions/4073677/what-is-the-initial-value-of-a-javascript-functions-prototype-property
有这样一句话:
任何新创建的 Function 实例的原型的初始值都是 Object 的新实例
据我所知,Javascript 没有类,因此“实例”这个词在我看来没有意义。应该如何解释 Javascript 中的“实例”?
抱歉,我没有足够的代表将我的问题放入该答案的评论线程中。
你说得对,JavaScript 还没有类,但它确实有构造函数,instanceof
运算符定义了对象和构造函数之间的关系,以及基于原型链的继承形式。
obj instanceof ctor
当ctor.prototype
is on obj
的原型链。
以下面的警告为模数,您可以实施instanceof
在 EcmaScript 5 中因此
function isInstanceOf(obj, ctor) {
var proto = ctor.prototype;
if (typeof obj === "object" || typeof obj === "function") {
while (obj) {
if (obj === proto) { return true; }
obj = Object.getPrototypeOf(obj);
}
}
return false;
}
除非你到处重新分配原型(o = new MyConstructor(); MyConstructor.prototype = somethingElse
)应该是这样的情况new MyConstructor() instanceof MyConstructor
.
Section 15.3.5.3 http://es5.github.com/#x15.3.5.3详细解释了这一点。
15.3.5.3[[HasInstance]] (V)
假设 F 是一个 Function 对象。
当使用值 V 调用 F 的 [[HasInstance]] 内部方法时,将执行以下步骤:
-
如果 V 不是对象,则返回 false。
-
令 O 为调用属性名为“prototype”的 F 的 [[Get]] 内部方法的结果。
-
如果 Type(O) 不是 Object,则抛出 TypeError 异常。
-
Repeat
- 令 V 为 V 的 [[Prototype]] 内部属性的值。
- 如果 V 为空,则返回 false。
- 如果 O 和 V 引用同一个对象,则返回 true。
这并不是故事的全部,因为宿主对象(如 DOM 节点)可以实现[[HasInstance]]
然而,他们喜欢内部方法,但大多数浏览器实现宿主对象以使其行为尽可能接近本机对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)