2016-05-13 48 views
0

我想知道为什么当我调用下面的函数的结果是“否”,因为属性c应该存在。有谁知道为什么?谢谢!!!hasOwnProperty -wont显示属性,即使它具有属性

var letters = function() { 
    this.a = 5; 
    this.b = 20; 
    }; 

    letters.prototype = { 
    c: 10 
    }; 

    var letters = new letters(); 

function looping(obj){ 
if (obj.hasOwnProperty(this.c)) { 
console.log("ua"); 
} 
else { 
    console.log("no"); 
} 
} 

looping(letters);

回答

0

hasOwnProperty的参数应该是一个字符串。

console.log(obj.hasOwnProperty("c") ? "UA" : "no") 

此外,hasOwnProperty的全部内容是证明属性/不是从原型获得的,所以测试应该失败。

+0

我想要做的是:函数循环(obj){0} {0} {0} {0}变量属性= [];如果(!obj.hasOwnProperty(“c”)){ \t properties.push(key); } 返回属性; } //所以只有将它推到属性数组,如果它不是c属性 - 因此推送ll属性,但那个特定属性,那是我尝试用hasOwnProperty – learningcoding

+0

@learningcoding哈哈测试?什么是“钥匙”? –

+0

对不起,我错过了包含循环\t //(var key in obj) – learningcoding

2

“有自己的财产”c虽然。 c是其原型的一部分,因此它不是您正在测试的对象的属性。

至少,如果您打算按照您的意愿调用obj.hasOwnProperty('c'),那么答案就是这样。你实际打电话的是obj.hasOwnProperty(window.c),这是obj.hasOwnProperty(undefined),显然是false