考虑一下这个简单的Mootools类:
var Garden = new Class({
fruits : {
banana : 'yellow',
kiwi : 'brown',
strawberry : 'red'
},
initialize : function() {
console.log(this.fruits);
console.log(this.fruits.banana);
console.log(Object.keys(this.fruits));
}
});
var g = new Garden;
Run Code Online (Sandbox Code Playgroud)
输出(在Chrome控制台中):
reset.F
yellow
[]
Run Code Online (Sandbox Code Playgroud)
第三行应该是:['banana','kiwi','strawberry']问题出在Mootools重置方法中,该方法创建一个以原始水果对象为原型的新对象.由于Object.keys迭代检查hasOwnProperty,它返回一个空数组.
有关如何获得预期产量的任何想法?
这将获得预期的输出:
var Garden = new Class({
fruits : {
banana : 'yellow',
kiwi : 'brown',
strawberry : 'red'
},
initialize : function() {
console.log(this.fruits);
console.log(this.fruits.banana);
var foo = Object.clone(this.fruits);
console.log(Object.keys(foo));
}
});
var g = new Garden();
Run Code Online (Sandbox Code Playgroud)
然而 - 至于它为什么会发生 - 因为水果只有继承属性,当你克隆它时,它将继承的属性克隆到新对象,以取消引用它们