如果我有对象功能,我应该何时使用this.something
代替func.prototype.something
?
只是为了澄清:
function Person()
{
this.walk=function(){...};
}
而不是:
function Person()
{}
Person.prototype.walk=function(){...};
何时使用一种形式而不是另一种形式?这两种解决方案的优点和缺点是什么?特别是在我总是使用var person = new Person();
答案 0 :(得分:4)
这两段代码真的很不一样,并且实现了不同的目标。
第一个示例涉及一个函数,该函数在调用时将属性添加到接收器对象(this
引用的对象),或者更新该属性的值(如果已存在)。因此,使用不同的接收器调用“Person”函数将分别更新这些对象,每个对象都获得一个名为“walk”的属性。如果“Person”用作构造函数,则新创建的对象将同样直接更新。
第二个示例将一个方法添加到函数的 prototype 对象中。当随后使用new
调用该函数时,生成的新对象将从原型对象继承属性。这意味着可以将这些对象视为实际上具有称为“walk”的属性,该属性是可调用函数。但是,该属性并不直接存在于每个构造对象上;它是可见的,因为角色原型对象在JavaScript属性查找中起作用。
答案 1 :(得分:1)
如果您需要在Person的所有实例上使用此功能,则需要使用prototype
。另请参阅this stackoverflow post。