使用原型链定义函数

时间:2012-06-12 19:05:56

标签: javascript

假设我将对象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成立(我也不会) 期待它!)。

1 个答案:

答案 0 :(得分:4)

不,这是不可能的(以标准方式)。创建可调用对象(即函数)的每种可能性都将创建一个继承自Function.prototype 1 ;然后你不能在 2 之后改变一个对象的[[prototype]]

另见:

1:好的,ES6允许我们subclass Function。但这并不像听起来那么有用 2:从ES6开始,您可以使用Object.setPrototypeOf