JavaScript原型的意义到底是什么
what exactly is the point of javascript prototype
无论我在构造函数中使用"this.value=1;",还是只是将属性值放在函数构造函数的原型中,我都会得到完全相同的结果 - "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);
结果是 :
1
13
1
由于最后一个值是 1,显然每个对象 (A,B) 都会在自己的内存块中获取自己的值副本那么,如果原型值不在对象之间共享,那么它们究竟有什么用呢?
你的测试是似是而非的。原型值在值之间共享,但在写入 a.value = 13
时,您已在 a
上隐藏了 MyClass.prototype.value
属性。试试这个尺寸:
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);
(演示)
对象属性查找沿原型链向上移动,直到原型为 null 或找到具有指定名称的属性。在原始测试中a.value = 13
会导致对a.value
的查找以a
结尾 - 因为该对象上有一个名为value
的属性 - 在到达原型之前。
更多阅读:
- JavaScript .prototype 是如何工作的?
- 继承和原型链
"我得到的结果完全一样"
只是因为您还不知道如何解释您的测试结果。
所有实例共享原型中的属性,但实例可以具有与原型同名的实例属性。
因此,当您说a.value = 13
时,您正在a
实例上创建一个属性,但原型value
属性仍然1
。
如果你说MyClass.prototype.value = 13
你会看到a.value
和b.value
报告13
,即使您在创建a
和b
后更改原型的value
。
相关文章:
- 什么是“;原型;通过JavaScript中的Object Literal Notation创建的对象的链接
- JavaScript原型的意义到底是什么
- javascript继承中正确的原型做作是什么
- 它继承的字符串原型是什么
- 组织对象原型的更好方法是什么
- 构造函数属性值应该是什么 .a 原型构造函数或对象构造函数本身
- 调用原型函数的元素是什么
- 在原型方法中使用它的最佳方法是什么
- 什么是JavaScript原型
- 在原型上定义对象属性的理由是什么
- 使用原型继承的javascript代码中的对象生存期是什么
- Javascript:什么是多级原型层次结构,为什么我们应该避免它
- 原型的目的是什么
- undefined在javascript函数原型中指的是什么?
- 在javascript中破坏原型链的副作用是什么?
- 在原型设计时跟踪javascript对象引用的最佳方法是什么?
- 为多种类型创建原型的更好方法是什么?
- JavaScript:在构造函数中定义函数而不是使用原型——区别是什么?
- Number和Function之间的关系是什么?javascript中的原型
- 创建对象后设置原型属性的可移植方法是什么?