1

假设我有一个对象X定义为

var X = function () {};
X.prototype.doSomething = function () {};
X.prototype.doSomethingElse = function () {};

是否有可能构造一个函数 ?请注意,我也必须能够没有.ff instanceof Xf()TypeError


在 Mozilla 中,我可以做我想做的事__proto__

var f = function () {};
f.__proto__ = new X;

但是,这是 (1) 非标准和 (2) 已弃用的。MDN 的页面__proto__建议Object.getPrototypeOf改用,但我真正想要的是一个Object.setPrototypeOf(它不存在,尽管这个想法是在这个错误报告中提出的)。

我想要的一个便宜的近似值是

var f = function () {};
jQuery.extend(f, new X);

不幸的是,这并不f instanceof X成立(我也不希望它成为现实!)。

4

1 回答 1

4

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

也可以看看:

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

于 2012-06-12T19:19:39.477 回答