2015-10-06 85 views
3

如果我想設置原型,我需要做的總是在函數/對象之外。我想這樣做與this.prototype ...JavaScript設置原型與this.prototype

例如:

MyPrototype = function() { 
    this.name = "MyPrototype"; 
    this.number = 3; 
} 
MyObjectToExtend = function() { 
    this.prototype = new MyPrototype(); //<-- I want this 
    this.name = "MyObjectToExtend"; 
} 
o = new MyObjectToExtend(); 

如果我想獲得o.number我會得到什麼。但它有可能與o.prototype.numer訪問它,但我不認爲這是你應該如何得到它,因爲波紋管例如工作正常...

MyPrototype = function() { 
    this.name = "MyPrototype"; 
    this.number = 3; 
} 
MyObjectToExtend = function() { 
    this.name = "MyObjectToExtend"; 
} 
MyObjectToExtend.prototype = new MyPrototype(); //<-- I don't want this 
o = new MyObjectToExtend(); 

現在我可以訪問o.number,它會給因爲它應該是我的3

但我不想這樣,我想設置的原型在上面例子...

+6

你想要的問題是它不起作用。你不想做的事情。 Javascript是一個像這樣的情緒過山車,迫使你寫代碼工作 –

+1

你可能會在這裏找到答案:http://stackoverflow.com/a/9516739/115493 – mik01aj

+0

@JaromandaX這可能是'原型'。我只想用'MyObjectToExtend'來分享屬性和函數,而不需要在「構造/定義」之外添加大量代碼(我不是專家,希望這被稱爲是正確的),我可以在那裏擴展它們...... – TheEquah

回答

0

在這種情況下,this關鍵字是您的類的實例的引用。有一個名爲__proto__的屬性,允許您更改此特定實例的原型的值,但不建議使用它的使用,並且在此情況下它不會影響您班級的其他實例。

您可以使用Object.getPrototypeOf(this).number = 3向您的原型添加屬性,但是如果不使用MyObjectToExtend.prototype = new MyPrototype();__proto__,則無法更改原型的值。