考虑一下这个简单的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;
输出(在Chrome控制台中):
reset.F
yellow
[]
第三行应该是:['banana','kiwi','strawberry'] 问题出在Mootools重置方法中,该方法创建一个以原始水果对象为原型的新对象。由于Object.keys迭代检查hasOwnProperty,它返回一个空数组。
关于如何获得预期输出的任何想法?
答案 0 :(得分:5)
这将获得预期的输出:
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();
然而 - 至于它为什么会发生 - 因为水果只继承了属性,当你克隆它时,它会将继承的属性克隆到新对象以取消引用它们