1

系列文章

js原型链1
js原型链2

代码如下:

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是有值的。这是原型链的基本机制。

那么第二个问题也就知道了。

第三个问题,zzz.__proto__.getName()中,因为是zzz.__proto__调的getName,也就是person.prototype.getName,由于person.prototype中没有name属性,所以返回undefined。

这里涉及的知识虽然简单,但是整个js的基础。


唯见长江天际流
827 声望11 粉丝

黄鹤楼送孟浩然之广陵


« 上一篇
html5语义化
下一篇 »
input标签总结