什么时候在JavaScript中直接向对象添加属性?

时间:2017-01-04 14:17:20

标签: javascript

假设我们正在定义一个Person构造函数并创建一个像这样的新人:

function Person(name){
    this.name = name;
}
var person = new Person("John Doe");

以下两个实现输出:来自John Doe的 Hello

第一次实施

person.sayHello = function(){console.log("Hello from " + this.name);}

正在运行代码1

function Person(name){this.name = name;}
var person = new Person("John Doe");
person.sayHello = function(){console.log("Hello from " + this.name);}
person.sayHello();

第二次实施

Person.prototype.sayHello = function(){console.log("Hello from " + this.name);}

正在运行代码2

function Person(name){this.name = name;}
var person = new Person("John Doe");
Person.prototype.sayHello = function(){console.log("Hello from " + this.name);}
person.sayHello();

我的问题是:

  1. 由于结果相似,何时最好将属性直接添加到创建的对象?

1 个答案:

答案 0 :(得分:1)

简单来说,使用对象的prototype用于在创建对象属性后扩展它们。最好的用例之一是,当类不是由您编写,或从某个地方导入时,您需要扩展它。

  

2个实现是否相似(我不是在讨论结果而是副作用)?

AFAIK,它是一样的。

  

如果不是,有什么不同,我们应该选择第一个还是第二个?

是的,但是何时使用,请参见上文。