1

i get absolutely the same results whether i use "this.value=1;" inside the constructor function or just put property value inside prototype of function constructor - "MyClass.prototype.value =1;"

function MyClass() {
 //this.value=1;
}
MyClass.prototype.value =1;


var a = new MyClass();
document.write(a.value + "<br>");
a.value=13;
document.write(a.value + "<br>");

var b = new MyClass();
document.write(b.value);

result is :

1

13

1

since last value is 1, obviously every object (a,b) get it's own copy of value inside it's own memory block so what exactly is the use of prototype values if they are not shared between objects?

4

2 回答 2

6

你的测试是似是而非的。原型值在值之间共享,但在写作中a.value = 13,您已将属性MyClass.prototype.value隐藏在a. 试穿这个尺寸:

function MyClass() {}
MyClass.prototype.value = 1;

var a = new MyClass();
document.write(a.value + "<br>");
a.__proto__.value=13;
document.write(a.value + "<br>");

var b = new MyClass();
document.write(b.value);

演示

对象属性查找沿着原型链向上传播,直到原型为空或找到具有指定名称的属性。在您的原始测试中,由于在该对象上调用了一个属性,因此在到达原型之前就结束了a.value = 13查找。a.valueavalue

更多阅读:

于 2012-08-15T02:07:33.923 回答
2

“我得到完全相同的结果”

只是因为你还不知道如何解释你的测试结果。

所有实例共享原型的属性,但实例可以具有与原型同名的实例属性。

因此,当您说a.value = 13要在实例上创建属性a但原型value属性仍然是1.

如果您改为说即使您在创建andMyClass.prototype.value = 13更改原型,您也会看到这两者a.valueb.value报告。13value ab

于 2012-08-15T02:13:56.107 回答