0

可能重复:
在 Javascript 中使用“原型”与“这个”?

如果我有一个对象函数,我应该什么时候使用this.something而不是func.prototype.something

只是为了澄清:

function Person()
{
   this.walk=function(){...};
}

代替:

function Person()
{}
Person.prototype.walk=function(){...};

什么时候方便使用一种形式而不是另一种形式?这两种解决方案的优缺点是什么?特别是在我一直使用的情况下var person = new Person();

4

2 回答 2

4

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

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

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

于 2012-10-01T20:23:15.813 回答
1

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

于 2012-10-01T20:20:09.777 回答