当前位置: 首页 > 编程笔记 >

JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()

空鸿云
2023-03-14
本文向大家介绍JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf(),包括了JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的使用技巧和注意事项,需要的朋友参考一下

首先了解枚举属性

一般利用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 •要检测的属性名称。 描述 所有继承了

  • 对于某些值,调用会引发错误。 让我们检查以下代码: 除了使用