系列文章
代码如下:
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是有值的。这是原型链的基本机制。
那么第二个问题也就知道了。
第三个问题,zzz.__proto__.getName()中,因为是zzz.__proto__调的getName,也就是person.prototype.getName,由于person.prototype中没有name属性,所以返回undefined。
这里涉及的知识虽然简单,但是整个js的基础。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。