2014-06-12 41 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的书上。非常感谢你... –

相关问题