上面一篇文章我们介绍到了原型,就有一个疑问了,如果我们在构造函数内部封装方法的时候没有给函数内部封装同时也封装了一个wish()函数,输出的是什么呢
回顾一下代码
function person(name,age){
this.name = name
this.age = age
this.wish = fucntion(){
console.log('好好学习,天天向上')
}
this.say = function(){
console.log('hello my name is '+ this.name)
}
}
person.prototype.wish = functionm(){
console.log('世界和平')
}
var objXiaoMing = new person('xiaoming',20)
这个时候我们输出一下
objXiaoMing.wish() //'好好学习,天天向上'
这就涉及到原型链的知识,首先对象寻找一个方法的时候,他会去在自己内部寻找,如果没有,那么他会去自己的__proto__
这个属性里面去寻找,依然没有找到,它会继续向上寻找,直到找到这个方法为止!这一个寻找路线,我们就可以理解是原型链
问题:往上找,哪里是上?
想要理解这个问题,首先我们需要理解一下三个概念
- 当 new 一个函数的时候会创建一个对象,『函数.prototype』 等于 被
创建对象.__proto__
- 一切函数都是由 Function 这个函数创建的,所以『Function.prototype === 被创建的函数.proto』
- 一切函数的原型对象都是由 Object 这个函数创建的,所以『Object.prototype === 一切函数.prototype.proto』