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

Property update to trigger the another method of an object

本文关键字:另一个 方法 触发对象 更新 属性      更新时间:2023-09-26

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

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

你可以使用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"

它的编码与你的完全一样,这有点奇怪,因为"reverse"的值似乎无关紧要,但这将使你继续与订阅操作的主要挑战属性更改