属性更新以触发对象的另一个方法

时间:2014-06-12 20:02:29

标签: javascript

如何创建构造函数以便在其对象上设置或更改属性会自动触发其自身的方法或其他函数?

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 个答案:

答案 0 :(得分:1)

你可以使用Object.defineProperty()来创建一个也触发的getter-setter:

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);

在警告

中显示“fred,derf”

它的编码与你的编码完全一样,这有点奇怪,因为“反向”的值似乎并不重要,但是这将使你接受订阅动作更改属性的主要挑战。