js学习笔记51——原型对象2
使用in检查对象中是否有某个属性时,如果对象中没有但原型中有,也会返回true。
<script>
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
Person.prototype.sayName= function(){
alert(this.name);
};
var per = new Person("孙悟空",18,"男");
console.log("sayName" in per);
</script>
这不符合预期,要怎么处理呢?
用hasOwnProperty
<script>
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
Person.prototype.sayName= function(){
alert(this.name);
};
var per = new Person("孙悟空",18,"男");
console.log(per.hasOwnProperty("sayName"));
console.log(per.hasOwnProperty("age"));
</script>
这hasOwnProperty
也是在原型里。
<script>
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
Person.prototype.sayName= function(){
alert(this.name);
};
var per = new Person("孙悟空",18,"男");
console.log(per.hasOwnProperty("hasOwnProperty"));
console.log("hasOwnProperty" in per);
</script>
但是这样检查呢?
<script>
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
Person.prototype.sayName= function(){
alert(this.name);
};
var per = new Person("孙悟空",18,"男");
console.log(Person.prototype.hasOwnProperty("hasOwnProperty"));
</script>
???什么情况???
原型对象本身是一个对象,它也有原型,所以这个是在原型对象的原型里。
console.log(per.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));
是否有无限个原型嵌套呢?
不会,Object对象的原型没有原型,如果在Object中依然没有找到,则返回undefined。