2014-06-12 78 views
0

如何創建構造函數,以便設置或更改其對象的屬性自動觸發其自己的方法或其他函數之一?屬性更新觸發對象的另一種方法

function Creator(name){ 
    this.name=name; 
    this.reverse="dont" 
    this.reversal=function(){/*code to reverse name */} 

} 

我想實現如下:

var my_name=new Creator("Chris"); 
my_name.reverse="do" // THIS SHOULD AUTOMATICALLY RUN my_name.reversal METHOD 

回答

1

你可以使用Object.defineProperty()來使一個getter制定者也觸發:

function Creator(name){ 
    this.name=name; 
    var isRev="dont"; 
    Object.defineProperty(this,"reverse", { 
     get: function(){return isRev}, 
     set: function(v){isRev=v; this.reversal(); } 
    }); 
    this.reversal=function(){this.name=this.name.split("").reverse().join("");} 
} 

fred=new Creator("fred"); 
r=[fred.name]; 
fred.reverse="do"; 
r.push(fred.name); 
alert(r); 

這表明「弗雷德, derf「

它的編碼與你的完全一樣,這有點奇怪,因爲」反向「似乎並不重要,但這會讓你面對訂閱行爲對財產變化的主要挑戰。

+0

謝謝丹.....我已經完全忘記了!我曾經讀過,我的意思是,一週前在David Flanagan的書上。非常感謝你... –

相關問題