当前位置: 代码迷 >> 综合 >> in Vs hasOwnProperty 判断属性是否存在
  详细解决方案

in Vs hasOwnProperty 判断属性是否存在

热度:98   发布时间:2024-01-13 03:25:33.0

在原型继承过程中,会遇到一个问题是,某个属性是对象本身的 还是 继承下来的那 ? 如果有哪位同学对原型链知识有点遗忘,可以点击原型链这样还搞不懂,拿砖拍你自己吧,别拍我查看一波。

in 关键字

in 关键字用来判断对象的自有属性和继承来的属性是否存在

function Foo() {this.name = "胡三疯";
}
Foo.prototype.nationality = "中国"let foo = new Foo()console.log('name' in foo)  // true  自身
console.log('nationality' in foo)  // true   继承而来

hasOwnProperty()方法

该方法只能判断自有属性是否存在,对于继承属性会返回false

function Foo() {this.name = "胡三疯";
}
Foo.prototype.nationality = "中国"let foo = new Foo()console.log(foo.hasOwnProperty('name'))  // true  自身
console.log(foo.hasOwnProperty('nationality'))  // false   继承而来

判断属性由继承而来

通过上边的例子,我们可以发现 in关键词 和 hasOwnProperty()方法的用法,那我们如何判断某个属性是继承而来那?

function Foo() {this.name = "胡三疯";
}
Foo.prototype.nationality = "中国"let foo = new Foo()// 判断属性是否继承而来
function isprototype(property, obj) {return property in obj && !obj.hasOwnProperty(property) ? true : false;
}console.log(isprototype('name', foo))  // false
console.log(isprototype('nationality', foo)) // true

只需要先使用in 判断是否有此属性,然后使用hasOwnProperty方法判断是否是自己本身属性,若不是,则是继承而来的属性。