返回更多长度的方法然后返回属性

时间:2014-03-08 05:26:29

标签: javascript methods

我有一个下面的代码片段,但我不知道为什么条件不正确?

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?

2 个答案:

答案 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]