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