__proto__和prototype以及对象方法检索机制

关于这方面的文章也看了一些。。

 

今天是做一个总结和记录。

__proto__和prototype

prototype 函数属性 

__proto__  任意对象的属性;(函数也是一个对象)指向自身构造函数的原型对象。

对于下面这个例子,john.__proto__==Person.prototype

Person.prototype(这也是一个对象,它的原型是指的是Object).__proto__==Object.prototype;

理论上Object.prototype这个也是对象,它的.__proto__也应该指向Object.prototype。但是这就形成了一个死循环。

所以定义Object.prototype.__proto__==null;

                               

 

对象属性方法检索机制:

 

function Person(){


this.name='1'
this.work=function(){console.log('b')}

}
Person.prototype.work=function(){
console.log('a')
}
Person.prototype.name='2'

john=new Person();


console.log(john.name)//输出1
console.log(john.work)//输出b


function Person(){


}
Person.prototype.work=function(){
console.log('a')
}
Person.prototype.name='2'

john=new Person();


console.log(john.name)//输出2
console.log(john.work)//输出a


 

对于john来说,它是构造函数Person的实例对象,因为使用了new操作符,所以,Person中的this指向了john。work和name指向了john,

1. 我们查找john的work方法,先查找它自身,(这个例子中自身有work方法);

2. 如果没有的话,通过原型链去查找构造函数的原型对象。(删掉this.work,程序会输出a)

3. 如果构造函数的原型对象中也没有,就查找Object的原型对象。。Object没有,则会输出undefined。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值