为构造函数的原型上添加一条属性–in
和hasOwnProperty
的区别
//创建一个构造函数
function My(){
}
//为其原型中添加一个name属性
My.prototype.name = '武松';
var my = new My();
//用in去检查my对象是否有name的属性
console.log('name' in my);//true
in能检查对象中是否含有某个属性时---其对象没有时,但是原型有--也会返回true
此时,如果只检查对象自身是否含有某个属性时,可以用到hasOwnProperty
(不会去查找原型),继续上方的代码
my.hasOwnProperty('name');//false
上方的构造函数我们My.prototype可以为其添加属性。但是构造函数的实例
我们不能用prototype去查看,要用
__proto__
my.__proto__.xxx;
对象都有原型
—所以原型对象里面还有原型对象
—哈哈哈.继续上方的代码获取my实例对象的原型对象里面的原型对象
my.__proto__.__proto__;
但是要记住Object对象
的原型没有原型,所以一直找原型的话,找到这就到头了~
–
总结:
原型对象也是对象,所以当我们使用一个对象的属性或者方法时,会先在自身中寻找。
- 自身如果有,则直接使用
- 如果自身没有,则去原型对象中寻找,如果原型对象中有,则使用
- 如果没有,则去原型的原型中去找,直到找到Object对象的原型
- Object对象的原型没有原型,如果在Object原型中都没有找到,则返回
undefined