首先了解枚举属性
一般利用for~in遍历
var a = [1,2,3]; for(var i in a){ console.log(a[i]); } or var o = {p1:1,p2:2}; for(var i in o){ console.log(i+'='+o[i]); }//p1=1;p2=2;
<1>并不是所有的属性都会在for~in遍历中显示。比如(数组的)length属性和constructor属性。那些已经被显示的属性被称为可枚举的,可以通过各个对象所提供的propertyIsEnumerable()方法来判断其中有哪些可枚举的属性;
<2>原型链中的各个属性也会被显示出来,前提是它们可枚举的,hasOwnProperty()来判断一个属性是对象自身属性还是原型属性;
<3>对于所有的原型属性,propertyIsEnumerable()都会返回false,包括那些在for~in遍历中可枚举的属性。
js代码示例
function dog(name,color){ this.name = name; this.color = color; this.someMethod = function(){return 1;} } dog.prototype.price=100; dog.prototype.rating=3; var newDog = new dog("doggg","yellow"); for(var prop in newDog){ console.log(prop+'='+newDog[prop]); } //name=doggg //color=yellow //someMethod=function (){return 1;} //price=100 //rating=3 newDog.hasOwnProperty('name');//true; newDog.hasOwnProperty('price');//false;
只显示自身属性
for(var prop in newDog){ if(newDog.hasOwnProperty(prop )){ console.log(prop+'='+newDog[prop]); } } newDog.propertyIsEnumerable('name');//true newDog.propertyIsEnumerable('constructor');//false
注意:内建属性和方法大部分是不可枚举的
任何来自原型链中的属性也是不可枚举的
如果propertyIsEnumerable()的调用是来自原型链上的某个对象,那么该对象中的属性是可枚举的
newDog.constructor.prototype.propertyIsEnumerable('price');//true
isPrototypeOf():每个对象都有,表示当前对象是否是另一个对象的原型
js代码示例
var monkey = { hair:true, feeds:'bananas', breathes:'air' }; function Human(name){ this.name = name; } Human.prototype = monkey; var george = new Human('George'); monkey.isPrototypeOf(george);//true
以上所述是小编给大家介绍的JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf(),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
问题内容: 我在Twitter的JS文件中找到了以下代码段。我想知道为什么他们需要调用该函数才能看到该属性?for循环针对“dict”中的每个“ key”运行,这意味着“ dict”具有“ key”,我是否遗漏了一点? 问题答案: 因为如果不这样做,它将遍历原型链上的每个属性,包括您不知道的属性(这些属性可能是由于弄乱了本机对象原型而添加的)。 这样,您可以确保仅该对象实例本身上的键。
本文向大家介绍详谈js使用in和hasOwnProperty获取对象属性的区别,包括了详谈js使用in和hasOwnProperty获取对象属性的区别的使用技巧和注意事项,需要的朋友参考一下 in判断的是对象的所有属性,包括对象实例及其原型的属性; 而hasOwnProperty则是判断对象实例的是否具有某个属性。 示例代码: 以上代码执行的时候,name属性要么是从实例中获取的,要么是来源于原型
本文向大家介绍浅谈js使用in和hasOwnProperty获取对象属性的区别,包括了浅谈js使用in和hasOwnProperty获取对象属性的区别的使用技巧和注意事项,需要的朋友参考一下 in判断的是对象的所有属性,包括对象实例及其原型的属性; 而hasOwnProperty则是判断对象实例的是否具有某个属性。 示例代码: 以上代码执行的时候,name属性要么是从实例中获取的,要么是来源于原型
为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自 Object.prototype 的 hasOwnProperty 方法。 注意: 通过判断一个属性是否 undefined 是不够的。 因为一个属性可能确实存在,只不过它的值被设置为 undefined。 hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数。 // 修改Ob
本文向大家介绍javascript中hasOwnProperty() 方法使用指南,包括了javascript中hasOwnProperty() 方法使用指南的使用技巧和注意事项,需要的朋友参考一下 概述 hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。 语法 obj.hasOwnProperty(prop) 参数 •prop •要检测的属性名称。 描述 所有继承了
对于某些值,调用会引发错误。 让我们检查以下代码: 除了使用