首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在*构造函数中声明的属性在实例中可见。为什么?

在*构造函数中声明的属性在实例中可见。为什么?
EN

Stack Overflow用户
提问于 2011-01-17 01:15:00
回答 1查看 139关注 0票数 1

在Javascript的原型继承系统中,对象的内部原型引用被设置为其构造器的“prototype”属性,它本身就是一个对象。

构造函数的“prototype”属性的属性可以被解析为对象实例的属性。但是,实例无法访问构造函数对象的实际属性:

代码语言:javascript
复制
function MyConstructor() { }
MyConstructor.x = 3
MyConstructor.prototype.y = 7

a = new MyConstructor()
a.x == 3    // FALSE
a.y == 7    // TRUE

但是,如果构造函数的属性(“x”)是在函数体中使用this关键字声明的,那么当然可以通过实例解析这些属性:

代码语言:javascript
复制
function MyConstructor() {
    this.x = 3
}
MyConstructor.prototype.y = 7

a = new MyConstructor()
a.x == 3    // TRUE

为什么?有什么关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-17 01:21:15

当你这样做时:

代码语言:javascript
复制
MyConstructor.x = 3;

.您只向MyConstructor引用的函数对象实例添加了一个属性。函数对象具有许多没有成为实例一部分的属性(也不希望它们成为实例的一部分)。

因此,通过构造函数创建实例属性的机制是使用this.x方法。

当构造函数运行时,this是要返回的对象。所以这只是一种方便,所以你不必这样做:

代码语言:javascript
复制
a = new MyConstructor();
a.x = 3;
a.x == 3    // TRUE!

因为构造函数中的this与结果对象相同,所以不需要在创建每个新实例时显式地执行它。

prototype对象只是一个由MyConstructor的所有实例引用的对象,因此如果实例上没有一个属性,那么它将转到prototype查找一个属性。

为了说明this与新实例之间的关系,请考虑以下示例:

示例: http://jsfiddle.net/M2prR/

代码语言:javascript
复制
var test; // will hold a reference to "this"

function MyConstructor() {
    test = this; // make "test" reference "this"
}

   // create a new instance
var inst = new MyConstructor;

   // see if they are the same object. This will alert "true"
alert( inst === test );
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4709245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档