要有人來今天這個跨越,用ES6/2015年有新的語法,你可以用它來避免過時__proto__
財產; Object.setPrototypeOf
。請注意,MDN warns這是一個慢/昂貴的操作。
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'
您可以返回一個函數,因爲函數是一個對象。但很明顯,'f instanceof F'不會是真的,因爲它不是真的。 – 2012-04-26 20:44:05
菲利克斯:同義反復都是同義的嗎? :) – 2012-04-26 20:45:42
爲什麼你想要instanceof工作?它通常被認爲是有害的。 – zetlen 2012-04-26 20:46:11