我有一个下面的代码片段,但我不知道为什么条件不正确?
Object.prototype.keys = function(){
var keys = [];
for ( var i in this )
keys.push( i );
return keys;
};
var obj = { a: 1, b: 2, c: 3 };
log( obj.keys().length == 3, "We should only have 3 properties." );
obj只有三个属性,但是在我返回之前我还写了这个声明,然后返回
log(keys)
//outpue a,b,c
但我不知道为什么它是flase,长度是4?
答案 0 :(得分:3)
您正在获取您在对象类型上设置的附加属性“键”..现在所有对象都有。
就像在对象上设置函数一样
var obj = { a: 1, b: 2, c: 3, keys: function(){ ... } };
4个属性
将keys函数委托给另一个类......或者只是将它作为JS中的函数而不是对象的成员函数。不要将它们的键功能附加到Object.prototype ..因为将它附加到所有对象会使其对所有对象都不正确。
答案 1 :(得分:1)
为确保您的对象仅具有直接属性但未继承,您可以使用hasOwnproperty()
这样的内容。
for ( var i in this ) {
if(this.hasOwnProperty(i)){
//--use this--^ to insure that your object has direct property not inherited.
keys.push(i);
}
}
// returns keys[a, b, c]