function object() {
var F = function() {};
F.prototype = {
alias: {},
hasOwnProperty: function() { return false; },
hasProperty: function(obj, prop) {
for (var i = 0; i < obj.length; i++) {
if (obj[i] !== prop) return false;
else if (obj[i] === prop) return true;
else return undefined;
}
}
};
return new F();
}
var newObj = object();
newObj.alias.msg = "Hello";
console.log(newObj.hasProperty(newObj.alias, "Hello"));
它为newObj.hasProperty返回undefined(newObj.alias,“Hello”)。为什么呢?
答案 0 :(得分:1)
这很可能是因为你正在迭代一个对象,就像你在迭代一个数组一样。
for循环从不循环任何东西,因为对象没有length属性,并且没有按数字索引。
您需要使用for-in循环:
for(var key in obj) {
//key will contain the name of the property, and obj[key] the value
if(key === blah) ...
}
答案 1 :(得分:0)
嗯,首先,alias
是一个普通对象,因此没有可用于.length
循环的for
属性。
如果你放置:
console.log(i);
...在你的for
循环中,你会注意到你从未真正运行过阻止。
即使你修复了循环,你仍然在第一个枚举中执行return
,所以如果你正在测试的属性不在循环中,那么你将得到一个不正确的结果
最终,您将无法使用循环复制hasOwnProperty()
的行为,因为prototype
将包含在枚举中。