hasOwnProperty,in区别:
hasOwnProperty:指出一个对象是否具有指定名称的属性
in:对象是否能够访问此属性(包括直接在对象上访问和通过原型访问)
看下示例代码:
(function () { function Person() { } var p = Person.prototype; p.name = "晨落梦公子"; p.age = 24; var person1 = new Person(); console.log(person1.hasOwnProperty("name")); // false console.log("name" in person1); //true })();
补充两行代码
person1.name = "meng"; console.log(person1.hasOwnProperty("name")); //true
利用两者的区别我们可以:判断该属性是存在于对象中还是原型中。
判断过程,先in如果为true,说明当前对象的父类有此属性,再用hasOwnProperty,true则表示他具有此属性,false就表示他还没有为此属性赋值。
巧记:hasOwnProperty,hasOwn嘛,就是表示他自己是否有此属性。
in,在什么里面,当前屋子里面沙发上有的东西也可以说成此屋子有此东西。
根据以上的思路自己衍生方法,目的是实现,判断对象是否有此原型方法
Object.prototype.hasPrototypeProperty=function ( pro) { return !this.hasOwnProperty(pro) && (pro in this); };
代码应用(person1声明同上)
console.log(person1.hasPrototypeProperty("name")); //true person1.name = "晨落梦公子"; console.log(person1.hasPrototypeProperty("name")); //false
从应用中可以看出,该方法效果,如果当前对象是原型上的方法则返回true,自己本身声明此属性后则返回false。