在Javascript的原型继承系统中,对象的内部原型引用被设置为其构造器的“prototype”属性,它本身就是一个对象。
构造函数的“prototype”属性的属性可以被解析为对象实例的属性。但是,实例无法访问构造函数对象的实际属性:
function MyConstructor() { }
MyConstructor.x = 3
MyConstructor.prototype.y = 7
a = new MyConstructor()
a.x == 3 // FALSE
a.y == 7 // TRUE但是,如果构造函数的属性(“x”)是在函数体中使用this关键字声明的,那么当然可以通过实例解析这些属性:
function MyConstructor() {
this.x = 3
}
MyConstructor.prototype.y = 7
a = new MyConstructor()
a.x == 3 // TRUE为什么?有什么关系?
发布于 2011-01-17 01:21:15
当你这样做时:
MyConstructor.x = 3;.您只向MyConstructor引用的函数对象实例添加了一个属性。函数对象具有许多没有成为实例一部分的属性(也不希望它们成为实例的一部分)。
因此,通过构造函数创建实例属性的机制是使用this.x方法。
当构造函数运行时,this是要返回的对象。所以这只是一种方便,所以你不必这样做:
a = new MyConstructor();
a.x = 3;
a.x == 3 // TRUE!因为构造函数中的this与结果对象相同,所以不需要在创建每个新实例时显式地执行它。
prototype对象只是一个由MyConstructor的所有实例引用的对象,因此如果实例上没有一个属性,那么它将转到prototype查找一个属性。
为了说明this与新实例之间的关系,请考虑以下示例:
示例: http://jsfiddle.net/M2prR/
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 );https://stackoverflow.com/questions/4709245
复制相似问题