在JavaScript中调用赋值函数



我很确定这是不可能的,但也许有聪明的人知道是否有机会做到这一点。有可能在哪里有代码吗:

1    myPerson = new Person();
2    myPerson.name = 'Charles Xavier';

其中第2行的代码自动检查myPerson.setName是否存在,如果存在,则调用

myPerson.setName('Charles Xavier');

代替直接分配。

不,对不起!这在ES6中是可能的,不过:

var o = {};
Object.defineProperty(o, "name", {
  set: function (value) {
    console.log("Property 'name' set to: " + value);
    // store 'value' somewhere
  }
});

c.f。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

相关:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

由于这在<在ES6中,像AngularJS这样的框架使用脏检查(也就是说,它们每秒检查X次值)来观察属性的变化。

并非适用于所有浏览器,但有一个javascript代理,它只适用于firefox,并使其变得毫无用处。:D

var Validator = {
    set: function(obj, prop, value){
        if(prop == 'name' && setName in obj)
            obj.setName(value);
        obj[prop] = value;
    }
}
var myPerson = new Proxy(Person, Validator);
myPerson.name = 'Charles Xavier'; // This will call Validator.set

最新更新