Mootools类 - 对象属性上的Object.keys()

Del*_*ite 4 mootools

考虑一下这个简单的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,它返回一个空数组.

有关如何获得预期产量的任何想法?

Dim*_*off 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();
Run Code Online (Sandbox Code Playgroud)

然而 - 至于它为什么会发生 - 因为水果只有继承属性,当你克隆它时,它将继承的属性克隆到新对象,以取消引用它们