hasOwnProperty()方法用于确定某个属性是在实例上还是在原型对象上。这个方法是继承自 Object 的,会在属性存在于调用它的对象实例上时返回 true,但是如果属性在原型上,不在调用的对象实例上,则会返回false。
in 操作符会在可以通过对象访问指定属性时返回 true,无论该属性是在实例上还是在原型上。
function Person() {}
Person.prototype.name = '朱元璋'
Person.prototype.age = 30
Person.prototype.job = '皇帝'
Person.prototype.sayName = function () {
console.log(this.name);
}
let person1 = new Person
let person2 = new Person
console.log(person1.hasOwnProperty("name") //false
person1.name = '崇祯'
console.log(person1.hasOwnProperty("name") //true
console.log("name" in person1);//true
console.log("name" in Person); //true
console.log(hasOwnPrototypeProperty(person1,'name')) //false
/**
* 判断对象属性是否是原型属性,返回false,表示此属性是原型属性
*/
function hasOwnPrototypeProperty(object,name) {
return !object.hasOwnProperty(name) && (name in object)
}
总结:hasOwnProperty,只能判断当前调用的对象是否存在某个属性;in 不论对象或原型上只要存在此属性都会返回true。可以用hasOwnPrototypeProperty判断一个对象属性是否是在原型上才有的属性。
你学废了吗?