javascript - 使用的正确模式 : this or prototype

标签 javascript

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/

相关文章:

javascript - 更新失败,无法加载触发器。错误未被捕获您必须使用 Parse.initialize 指定一个 key

javascript - 确定数组是否为因子链

javascript - 使用 Java Servlet 的 URL 路由

javascript - 如何在同一条消息中发送附件和嵌入内容?

Javascript:比较两个具有实际不同编码的字符串

javascript - 通过祖 parent 的父类选择一个 css3 元素

javascript - 如何在父组件中调用子组件的函数

JavaScript ES6 内联对象文字创建逻辑

javascript - Array.prototype.flatMap() JS 在测试用例和 repl.it 片段中表现奇怪,但在浏览器控制台中则不然

javascript - 为什么我的按位运算在模拟器中返回 0?