Javascript 为什么hasOwnProperty别名错误地返回undefined? 函数对象(){ var F=函数(){}; F.原型={ 别名:{}, hasOwnProperty:function(){return false;}, hasProperty:函数(对象、属性){ 对于(变量i=0;i
它返回newObj.hasProperty(newObj.alias,“Hello”)的未定义值。为什么?首先,Javascript 为什么hasOwnProperty别名错误地返回undefined? 函数对象(){ var F=函数(){}; F.原型={ 别名:{}, hasOwnProperty:function(){return false;}, hasProperty:函数(对象、属性){ 对于(变量i=0;i,javascript,Javascript,它返回newObj.hasProperty(newObj.alias,“Hello”)的未定义值。为什么?首先,别名是一个普通对象,因此没有可用于for循环的.length属性 如果您放置: function object() { var F = function() {}; F.prototype = { alias: {}, hasOwnProperty: function() { return false; }, hasPro
别名是一个普通对象,因此没有可用于for
循环的.length
属性
如果您放置:
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"));
…在for
循环中,您会注意到您从未实际运行过块
即使修复了循环,在第一次枚举中仍会执行返回
,因此如果要测试的属性不是循环中的第一个,则会得到错误的结果
最终,您将无法使用循环复制hasOwnProperty()
的行为,因为prototype
将包含在枚举中。这很可能是因为您正在迭代对象,就像在迭代数组一样
for循环根本不会循环任何东西,因为对象没有length属性,也不按数字索引
您需要使用for in循环:
console.log(i);
for(var key in obj) {
//key will contain the name of the property, and obj[key] the value
if(key === blah) ...
}