假设我将对象X
定义为
var X = function () {};
X.prototype.doSomething = function () {};
X.prototype.doSomethingElse = function () {};
是否可以构建函数 f
以便f instanceof X
?
请注意,我必须能够在没有f()
的情况下执行TypeError
。
在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
成立(我也不会)
期待它!)。
答案 0 :(得分:4)
不,这是不可能的(以标准方式)。创建可调用对象(即函数)的每种可能性都将创建一个继承自Function.prototype
1 ;然后你不能在 2 之后改变一个对象的[[prototype]]
。
另见:
1:好的,ES6允许我们subclass Function
。但这并不像听起来那么有用
2:从ES6开始,您可以使用Object.setPrototypeOf
。