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

相關文章
相關標籤/搜索