Mer*_*tce 7 javascript prototype
我想了解javascript中的原型.例如:
1)
var MyObject = function() {
this.a = "a";
return this;
}
MyObject.prototype.fn = function() {console.log('1');}
var obj1 = new MyObject1();
Run Code Online (Sandbox Code Playgroud)
2)
var MyObject = function() {
this.a = "a";
this.fn = function() {console.log('1');}
return this;
}
var obj2 = new Object2();
Run Code Online (Sandbox Code Playgroud)
我得到obj1和obj2一样.所以,我在2)做的也是原型?或不?我对原型缺少什么?
小智 2
obj1 和 obj2 略有不同,我将为您提供有关 JavaScript 中 prottypal 继承的快速解释。
原型是一个对象,就像任何其他对象一样。
每个具有原型的对象都将从它继承所有属性和方法,如果它们已经在对象中定义,则覆盖它们。原型引用是实时的,这意味着,每当您修改作为另一个对象原型的对象时,更改都会反映在该对象中。
您正在使用伪经典继承方法,通过该方法您可以定义一个Constructor将返回“类”实例的函数。该类的所有实例都将以以下位置定义的对象作为其原型对象:Constructor.prototype,您可以向该原型添加方法或属性,这些方法或属性将被添加到该“类”的每个实例中。
为什么 obj1 和 obj2 不同?
obj1 不保存对该fn方法的直接引用,而是保存对原型的引用,该原型具有该方法,因此 obj1 也具有该方法。
obj2 直接引用该方法,这意味着它是对象自己的属性。
您可以通过更改原型的方法来更改 obj1 的 fn 方法,并且 MyObject 的任何其他实例(如 obj1)也将被更改。
但你不能在 obj2 中这样做,如果你修改 obj2 的方法,你只会替换该实例的方法。
我希望你有所收获,如果你有任何疑问就问吧。
关于“类”的书写:JavaScript没有类,它用原型模拟类继承,你可以使用原始原型继承Object.create,你会发现它更容易。
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |