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