对于今天遇到此问题的任何人,使用 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'