Object syntax in javascript
本问题已经有最佳答案,请猛点这里访问。
我正在学习的这本书说下面的代码正在创建一个对象,但我不确定它是如何工作的。 第二部分代码是我从在线教程中学到的另一种方式。 但有什么区别?
我本人试图对此进行研究,但对所有这些以及我不理解的一些解释都是新手。 使用每一个都有优点/缺点吗? 提前致谢。
1 2 3 4 5 6 7 | function Player (name , score , rank) { this.name = name ; this.score = score ; this.rank = rank ; } var playerOne = new Player ("Craig" , 199 ,"1st" ) ; |
以下是我以前做过的方式;
1 2 | var playerOne = {name:"Craig" , score: 199 , rank:"1st"} ; var playerTwo = {name:"Tohny" , score: 155522 , rank:"2nd"} ; |
主要区别在于第一个在其"原型链"中将有一个额外的对象。原型链是您在JavaScript中继承的方式。
因此,您可以扩展该对象,并且从
1 2 3 4 5 6 7 8 9 10 11 12 | function Player (name , score , rank) { this.name = name ; this.score = score ; this.rank = rank ; } Player.prototype.getNameRank = function() { return this.name +":" + this.rank; }; var playerOne = new Player ("Craig" , 199 ,"1st" ) ; |
所以现在
1 2 3 | var nr = playerOne.getNameRank(); console.log(nr); // Craig:1st |
您在JavaScript中创建的所有(最常见的)对象都将继承自
构造函数中的对象首先具有
您可以通过两种方式在JavaScript中创建对象。
但实际上,第二种方法只是以下的替代语法:
1 2 3 4 5 | var playerOne = new Object(); playerOne.name ="Craig"; playerOne.score = 199; playerOne.rank ="1st"; // ... |
But what is the difference?
第一个使用构造函数,第二个使用对象初始化器。
Are there advantages/disadvantages to using each one?
是:
- 构造函数可以重用并且具有逻辑,因此当您需要创建具有相同特征的多个对象时,这些函数很有用。当你编写一堆代码后需要修改这些特性时,特别好,因为创建对象的代码很好并且包含在内。
-
构造函数可以将原型分配给它们创建的对象。如果将属性放在
Player.prototype 上,则通过new Player 创建的对象可以访问这些属性,因为这些对象由创建时分配给它们的原型备份。您无法使用对象初始值设定项执行此操作。 (如果将对象初始值设定项与ECMAScript5的Object.create 组合,则可以执行此操作。) - 对象初始化器在使用时是显式且相当清晰的,因为您可以看到您正在创建的每个属性的名称,而由于构造函数的参数基于您提供它们的顺序,因此它可以更少在您创建对象的位置清除(例如,使用构造函数)。事实上,有时你会看到构造函数接受一个对象作为它们的参数,然后使用该对象的属性来填充它们正在创建的对象。
第一个代码示例是构造函数。根据我的理解,这是一种更强类型的创建对象的方式,因为已经定义了该对象的参数和成员。
第二个代码示例确实做了同样的事情,但没有定义对象实际应该包含什么或它应该如何表现的东西。这并不是一件坏事,但对于某些情况来说,它远没有那么好,也没有像构造函数那样给你多少的功能。