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:OK、ES6ではサブクラス化Functionできます。しかし、それは思ったほど役に立ちません。
2:ES6以降、を使用できますObject.setPrototypeOf

于 2012-06-12T19:19:39.477 に答える