Вы должны знать, что JavaScript имеет классическую модель прототипного наследования вместо классической.Фактически это означает, что наследование осуществляется через то, что называется цепями прототипов .
Когда вы пытаетесь получить доступ к свойствам массива с помощью «for in», он будет «подниматься» по цепочке прототипов вплоть до arrayname.prototype, так как он наследуется от него!Если вы хотите узнать больше об этой функции, я настоятельно рекомендую вам взглянуть на JavaScript Garden от Ivo Wetzel, где я и нашел свои ответы!
В остальном выТакже следует знать, что 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?');
});