Possible Duplicate:
Use of 'prototype' vs. 'this' in Javascript?
如果我有一个对象函数,我什么时候应该使用 this.something
而不是func.prototype.something
?
只是为了澄清:
function Person()
{
this.walk=function(){...};
}
而不是:
function Person()
{}
Person.prototype.walk=function(){...};
何时方便使用一种形式而不是另一种形式?这两种解决方案的优点和缺点是什么?特别是在我总是使用 var person = new Person();
的情况下
最佳答案
这两段代码确实有很大不同,并且实现了不同的目标。
第一个示例涉及一个函数,该函数在调用时向接收者对象(this
引用的对象)添加一个属性,或者更新该属性的值(如果该属性已存在)。因此,使用不同的接收者调用“Person”函数将分别更新这些对象,每个对象都会获得一个名为“walk”的属性。如果使用“Person”作为构造函数,那么新创建的对象同样会直接更新。
第二个示例将方法添加到函数的原型(prototype)对象中。当随后使用 new 调用该函数时,生成的新对象将从原型(prototype)对象继承属性。这意味着这些对象可以被视为实际上有一个名为“walk”的属性,这是一个可调用函数。然而,该属性实际上并不直接存在于每个构造的对象上;它是可见的,因为原型(prototype)对象在 JavaScript 属性查找中发挥着作用。
关于javascript - 使用的正确模式 : this or prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680419/