2014-09-04 20 views
1

爲什麼這段代碼給我一個錯誤「Uncaught TypeError:無法設置未定義的屬性'grossSuperAnnuation'?謝謝。試圖理解對象原型

function taxCalculation(configuration){ 
     this.superAnnuationPercentage = configuration.superAnnuationPercentage; 
     this.superAnnuationTaxRate = configuration.superAnnuationTaxRate; 
}; 

var tax = new taxCalculation({ 
    superAnnuationPercentage: 9.25, 
    superAnnuationTaxRate: 15 
}); 

tax.prototype.grossSuperAnnuation = function(income){ 
    return income * this.superAnnuationPercentage/100; 

}; 
+0

因爲原型是構造函數的屬性。但是每個對象都有鏈接到它的構造函數。因此,您可以執行以下操作:'tax.constructor.prototype.grossSuperAnnuation = function(){...}' – Evgeniy 2014-09-04 12:58:04

+0

不確定爲什麼要在實例上設置共享行爲。你想混淆自己和將來的程序員在處理你的代碼嗎?有關構造函數和原型的更多信息,請訪問:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR 2014-09-04 13:42:22

回答

2

你想改變的原型是你的構造的一個:

taxCalculation.prototype.grossSuperAnnuation = function(income){ 

如果你真的想從實例出發,你可以這樣做:

tax.constructor.prototype.grossSuperAnnuation = function(income){ 

注你可能

tax.grossSuperAnnuation = function(income){ 

但是隻有這個實例才具有該功能,而不是使用new taxCalculation創建的其他功能。