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