正确使用的模式:这个或原型

时间:2012-10-01 20:17:35

标签: javascript

  

可能重复:
  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();

的情况下

2 个答案:

答案 0 :(得分:4)

这两段代码真的很不一样,并且实现了不同的目标。

第一个示例涉及一个函数,该函数在调用时将属性添加到接收器对象(this引用的对象),或者更新该属性的值(如果已存在)。因此,使用不同的接收器调用“Person”函数将分别更新这些对象,每个对象都获得一个名为“walk”的属性。如果“Person”用作构造函数,则新创建的对象将同样直接更新。

第二个示例将一个方法添加到函数的 prototype 对象中。当随后使用new调用该函数时,生成的新对象将从原型对象继承属性。这意味着可以将这些对象视为实际上具有称为“walk”的属性,该属性是可调用函数。但是,该属性并不直接存在于每个构造对象上;它是可见的,因为角色原型对象在JavaScript属性查找中起作用。

答案 1 :(得分:1)

如果您需要在Person的所有实例上使用此功能,则需要使用prototype。另请参阅this stackoverflow post。