javascript - 关于原型对象中的this指向??
怪我咯
怪我咯 2017-04-11 11:52:32
[JavaScript讨论组]
function Person(name){
   this.name=name;
}
Person.prototype.getName=function(){
   return this.name;
}
//调用函数
var person=new Person("Nicholas");
alert(person.getName());//Nicholas

    各位元宵节快乐,这个问题是关于**原型对象中的this指向的**?
高程上说,无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性
,这个属性指向函数的原型对象。按照我的理解,Person.prototype将会作为一个指向原型对象的指针,
而getName()方法将会作为原型对象的的方法;而this的判定是根据具体的执行环境给出,我认为:
 Person.prototype.getName=function(){
   return this.name;
}
其中的this,应该指向该原型对象,而在原型对象里,并没有name属性,所以我认为调用该函数:
   var perosn=new Person("Nicholas");
   alert(person.getName());
后应该得不到name的值;**可事实是,得到了Nicholas**.
 
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
PHPz

刚才在另外一个问题中不是已经跟你详细解释过了吗?看来你并没有看懂啊 ~ ~。

回头去仔细看看再说吧。

再给你一个提示

// 在你的例子基础上,直接调用原型上的方法,这个东西,就跟你想的差不多了 - -!
Person.prototype.getName();

// 通过new出来的实例调用该方法
var person = new Person("Nxxxxxx");
person.getName();

结合这2个差异,和我之前的回答,再思考一下吧。

巴扎黑

Person.prototype是一个对象,这个对象上你定义了一个getName方法,这个方法你return的是this.name,重点来了,你这个方法是怎么执行的呢,person.getName()执行的,所以getName方法中的this指的就是person这个你new出来的对象,而person这个对象上有name这个属性。

伊谢尔伦
而在原型对象里,并没有name属性

这句话说错了,

new Person("Nicholas")

这段的执行过程中context就是new创建的对象,也就是

{
   this.name=name;
}

中的this所指向的对象,同时在执行完后返回给了

var person

那么它也是以person为context执行的function中的this,那么在new的过程中已经给这个对象进行了 name field(或者说property)分配,它已经有了这个field,也就是你说的属性

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号