海兰我写的JS和HTML一个快速和肮脏的列表的用户界面,可以过滤: https://jsfiddle.net/maxbit89/2jab4fa4/找到了JavaScript Setter错误?
所以这种用法是这样的(小提琴行:96):
var list = new ui_list(document.body, 200, 300, "Test");
var encoder = function(dom, value) {
console.log("begin encoding");
console.log(value)
dom.innerHTML = value.n;
}
list.add({'n': 1}, function() {
this.value.n++;
console.log(this.value.n);
// this.value = this.value;
}, encoder);
那么什么这basicaly确实是创建列表,并增加了一个元素它具有一个对象:{“n”个:1}作为值和onClickHandler(上list.add第二参数)至极应由1(小提琴线增加值: 104)
但它不会做到这一点,直到您取消注释在拨弄线106。 (使用FireFox 50.1.0和Edge浏览器进行测试)
有没有任何机构知道为什么js的行为如此呢? 在一个多simplier例如,这工作得很好:
var myObj= {
'onvalueChange' : function() {
console.log('value changed');
},
'print' : function() {
console.log('value:');
console.log(this.value);
console.log(this.value.n);
}
};
Object.defineProperty(myObj, "value", {
get: function() { return this._value; },
set: function(value) {
this.onvalueChange();
this._value = value;
}
});
myObj.value = {'n' : 1};
myObj.value.n++;
myObj.print();
你只能“看”属性一层深;更改为子属性不使用的setter /吸气 – dandavis