AxelRauschmayer在SpeakingJavascript:AnIn-DepthGuideforProgrammers中提到了以下函数:functiongetDefiningObject(obj,propKey){obj=Object(obj);//makesureit’sanobjectwhile(obj&&!{}.hasOwnProperty.call(obj,propKey)){obj=Object.getPrototypeOf(obj);//objisnullifwehavereachedtheend}returnobj;}正如作者所说,它的目的是“[迭代]对象obj
functionAnimal(name,numLegs){this.name=name;this.numLegs=numLegs}Animal.prototype.sayName=function(){console.log("Himynameis"+this.name);}varpenguin=newAnimal("CaptainCook",2);penguin.sayName();for(varpropinpenguin){console.log(prop);}penguin.hasOwnProperty('sayName')结果:namenumLegssayName=>false
我开发的一个客户端javascript库在某些方面使用对象作为散列。它使用属性名称作为键,使用for...in循环遍历从Json数据解析的对象。例如...(伪代码)varconversations={'sha1-string':{name:'foo',messages:[]}}for(varidinconversations){console.log(id);console.log(conversations[id].name);}不幸的是,MooTools(和Prototype等)将方法添加到全局命名空间,所以我的for...in循环现在遍历MooTools的添加项(例如limit、
看来我不明白JavaScript中in关键字的含义。看看这个代码片段(http://jsfiddle.net/3LPZq/):varx=[1,2]for(iinx){document.write(x[i]);}在jsfiddle中运行时,它不仅会打印数组中包含的值,还会打印数组对象的所有属性和方法。当我这样更改它时(http://jsfiddle.net/4abmt/):$(document).ready(function(){varx=[1,2]for(iinx){document.write(x[i]);}});它只打印值1和2。为什么会这样?这是由jQuery引起的还是in关键字
friend,我注意到在Firefoxv23.0.1中,HTMLElement(input,button..etc)的hasOwnProperty不起作用,button1.hasOwnProperty('id')=false我用forin来检查:varstr1='';for(ppinbutton1){if(button1.hasOwnProperty(pp)){str1+=(','+pp);}}alert(str1);//nothinghere但在chrome中hasOwnProperty运行良好。你知道这是一个错误吗? 最佳答案
这个问题在这里已经有了答案:Isaclosurefordereferencingvariablesuseful?(3个答案)关闭8年前。根据thisanswerto'Isobjectempty?'://SpeedupcallstohasOwnPropertyvarhasOwnProperty=Object.prototype.hasOwnProperty;我在小型JavaScript库中看到过一些类似的实现,例如:varslice=Array.prototype.slice;//orfunctionslice(collection){returnArray.prototype.slic
varfoo={bar:5}为什么foo.hasOwnProperty('__proto__')等于false?它不能来自原型(prototype)链中更高层的任何对象,因为它特定于这个对象。编辑:有些回答说是在Object.prototype上。但我不明白这是怎么回事。我的问题不是它在哪里,而是为什么它不在它应该在的地方。例如:vara=newFoo();varb=newBar();//FooinheritsfromBar那么a.__proto__不应该等于b.__proto__吗?因为他们都在读取Object.prototype吗? 最佳答案
我继承了一些Javascript代码,但我并不是真正的Javascript专家。我们有一个对象,它的行为类似于散列和值的集合,称为buckets。它具有作为哈希值的属性,每个属性都是一个对象。这是它在浏览器调试器中的样子:我们有一个containsKey()函数,它使用hasOwnProperty()检查buckets对象中是否存在哈希。containsKey:function(key){varhash=this.comparer.getObjectHashCode(key);if(!this.buckets.hasOwnProperty(hash))returnfalse;varar
建议始终使用hasOwnProperty,但在许多情况下不需要这样做。例如考虑以下代码:varobject=JSON.parse(somejsontext);for(varpropinobject){console.log(object[prop]);}我知道在这种情况下prop是对象的一部分,它由for..in明确定义。但根据MOZhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty我们应该使用它来避免迭代不可枚举的Prop,例如:v
在循环中使用hasOwnProperty是否毫无意义,因为对象总是有属性?例如:constfruits={apple:28,orange:17,pear:54,}for(letpropertyinfruits){if(fruits.hasOwnProperty(property)){console.log(fruits[property]);}} 最佳答案 如果您正在处理一个不从另一个对象继承的普通对象,例如您问题中的代码,是的,检查将是不必要的。当您迭代一个继承的对象时,它就会有用。例如:constfruit={isEdible: