【发布时间】:2012-06-12 19:05:56
【问题描述】:
假设我有一个对象X 定义为
var X = function () {};
X.prototype.doSomething = function () {};
X.prototype.doSomethingElse = function () {};
是否可以构造一个函数 f 以便f instanceof X?
请注意,我还必须能够在没有TypeError 的情况下执行f()。
在 Mozilla 中,我可以用 __proto__ 做我想做的事:
var f = function () {};
f.__proto__ = new X;
但是,即 (1) 非标准和 (2) 已弃用。 MDN's page for __proto__ 建议改用Object.getPrototypeOf,但我真正要找的是Object.setPrototypeOf(它不存在,尽管this bug report 提出了这个想法)。
我想要的便宜的近似值是
var f = function () {};
jQuery.extend(f, new X);
不幸的是,这不会使 f instanceof X 为真(我也不会
期待它!)。
【问题讨论】:
-
我相信您正在寻找的是通常称为“可调用对象”的东西。如果您正在寻找该术语,您可能需要在 StackOverflow 上进行快速搜索。不确定您是否会找到像
__proto__提供的那样简单的解决方案。 -
我会选择“为什么?”和“可能不会。”在这个上。
-
@RyanKinal:我链接的错误报告中显示了一个用例。
标签: javascript