var person = function(name){ this.name = name }; person.prototype.getName = function(){ return this.name; } var zzz = new person('zzz'); console.log(zzz.getName()); // zzz console.log(zzz.__proto__.getName());// undefined
1. zzz.__ptoto__.getName()是undefined? 2. zzz.getName()有值? 3. zzz中没有getName函数,为何能够直接调用啊?
下面对这三个问题进行一一解答:
首先说第三个。js的对象在找不到属性或函数时,会继续从原型中找。也就是zzz中没有getName函数,但会从person的prototype中找,找到后,调用getName,因为是zzz.getName(),因此getName中的this依然是zzz,因此this.name是有值的。这是原型链的基本机制。函数
那么第二个问题也就知道了。this
第三个问题,zzz.__proto__.getName()中,由于是zzz.__proto__调的getName,也就是person.prototype.getName,因为person.prototype中没有name属性,因此返回undefined。spa
这里涉及的知识虽然简单,可是整个js的基础。prototype