今日これに遭遇した人には、ES6/2015 で非推奨の__proto__
プロパティを回避するために使用できる新しい構文があります。Object.setPrototypeOf
. MDNは、これは低速で費用のかかる操作であると警告していることに注意してください。
function F() {
const f = function() {
return {};
}
Object.setPrototypeOf(f, F.prototype);
return f;
}
var f = new F();
f instanceof F; // returns true
f(); // returns {}
コンストラクターで値を初期化したい場合は、少し奇妙になることにも注意してください。返す関数の小道具としてそれらを設定する必要がありますが、後でプロトタイプに追加すると、それらは「this」として参照されます。例えば
function F() {
const f = function() {
return {};
}
f.favoriteBand = 'The Books';
Object.setPrototypeOf(f, F.prototype);
return f;
}
F.prototype.getFavoriteBand = function(){ return this.favoriteBand; }
var f = new F();
f.getFavoriteBand() // returns 'The Books'