<script> //创建一个构造函数 function Person(){ } Person.prototype.name = "我是Person的name"; var per1 = new Person(); console.log(per1.name); //in VS hasOwnProperty //in 判断一个属性是否属于一个函数。但如果该属性在prototype(原型对象中)也会返回true console.log("name" in Person); //true //hasOwnProperty 判断一个属性是否属于一个函数。但如果该属性在prototype(原型对象中)会返回false console.log(per1.hasOwnProperty("name")); //false //?hasOwnProperty这个属性在哪里呢? //当一个类的实例调用一个属性的时候,会先在自身找该属性 //如果没有到实例的原型对象中去找, //如果还没有再到实例的原型的原型中找 //直到找到Object的原型。 console.log(per1.__proto__.hasOwnProperty("hasOwnProperty")); //false console.log(per1.__proto__.__proto__.hasOwnProperty("hasOwnProperty")); //true console.log(per1.__proto__.__proto__.__proto__); //null </script>