js原型链2

系列文章

js原型链1
js原型链2segmentfault

代码以下:

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

内存分析图以下:

clipboard.png

三个疑问。

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

相关文章
相关标签/搜索