javascript - js对象原型函数和js对象函数的疑问?
天蓬老师
天蓬老师 2017-04-11 12:09:04
0
6
598
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

内存分析图如下:

那么,不应该是zzz.__ptoto__.getName()吗?但它是undefined。反而zzz.getName()有值,为什么呢 ?

最最重要的:zzz中没有getName函数,为什么可以直接调用啊?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all(6)
迷茫
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

zzz.__proto__指向的是zzz的原型对象,而在原型对象上执行getName方法时,此时的this指向的是这个原型对象而不是zzz,所以name属性在原型对象上没有定义,所以为undefined

在原型对象上添加name属性,就能看到其值

var person = function(name){
this.name = name
};
person.prototype.name="prototype_name";
person.prototype.getName = function(){
 return this.name; 
}

var zzz = new person('zzz');
console.log(zzz.getName()); // zzz
console.log(zzz.__proto__.getName());//prototype_name
伊谢尔伦

https://www.zhihu.com/questio...
我思考了下感觉我可能也分不太清,所以找了个知乎帖子,不知道能否帮上你.

大家讲道理

具体不太了解,但是症结肯定是出在this上面,你可以试试把getName改一下:

person.prototype.getName = function(){
 console.log(this)
 return this.name; 
}

zzz.getName()调用的时候,thiszzz
zzz.__proto__.getName()调用的时候,thiszzz.__proto__

Peter_Zhu
zzz.__proto__.getName === person.prototype.getName
// true

这是没问题的,说明实例的__proto__指向的的确是构造函数的prototype

至于为啥运行会出错,那是因为zzz.__proto__.getName()运行的时候,调用getName的对象是zzz.__proto__,所以,里面的this是指向它的,当然返回的就是undefined

阿神

情况大致是这样的:

zzz.__proto__显然没有name属性,他是zzz原型,显然没有具体实例的属性值。

阿神

最最重要的:zzz中没有getName函数,为什么可以直接调用啊?

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template