Javascript Koans——不能解决一个测试

Javascript Koans - cannot solve one test

本文关键字:一个 测试 Koans 不能 解决 Javascript      更新时间:2023-09-26

我正试图从Javascript Koans和卡住的"反射"块解决测试。谁能解决并解释下一个块的解决方案:

    test("hasOwnProperty", function() {
    // hasOwnProperty returns true if the parameter is a property directly on the object, 
    // but not if it is a property accessible via the prototype chain.    
    var keys = [];
    var fruits =  ['apple', 'orange'];
    for(propertyName in fruits) {
        keys.push(propertyName);
    }
    ok(keys.equalTo(['__','__', '__']), 'what are the properties of the array?');
    var ownKeys = [];
    for(propertyName in fruits) {
        if (fruits.hasOwnProperty(propertyName)) {
            ownKeys.push(propertyName);
        }
    }
    ok(ownKeys.equalTo(['__', '__']), 'what are the own properties of the array?');
    });

你必须知道JavaScript的特性是一个原型继承模型,而不是一个经典模型。实际上,这意味着继承是通过所谓的原型链完成的。

当你试图用"for in"来访问一个数组的属性时,它会"爬上"原型链,一直到arrayname。原型,因为它继承自它!

如果你想了解更多关于这个特性的信息,我强烈建议你看看Ivo Wetzel的JavaScript Garden,那是我最初找到答案的地方!

对于其余的,你还应该知道javascript引用数组的"自己的"属性作为十进制数,即。:第一个属性为'0',第二个属性为'1',等等

所以,解决方案是这样的:

test("hasOwnProperty", function() {
// hasOwnProperty returns true if the parameter is a property directly on the object, 
// but not if it is a property accessible via the prototype chain.
var keys = [];
var fruits =  ['apple', 'orange'];
for(propertyName in fruits) {
    keys.push(propertyName);
}
ok(keys.equalTo(['0', '1', 'fruits.prototype'), 'what are the properties of the array?');
var ownKeys = [];
for(propertyName in fruits) {
    if (fruits.hasOwnProperty(propertyName)) {
        ownKeys.push(propertyName);
    }
}
ok(ownKeys.equalTo(['0', '1']), 'what are the own properties of the array?');

});

相关文章: