javascript中的对象语法

时间:2013-10-29 17:47:41

标签: javascript object

我正在学习的这本书说下面的代码正在创建一个对象,但我不确定它是如何工作的。第二部分代码是我从在线教程中学到的另一种方式。但有什么区别? 我本人试图对此进行研究,但对所有这些以及我不理解的一些解释都是新手。使用每一个都有优点/缺点吗?提前谢谢。

function Player (name , score , rank)
{
this.name = name ;
this.score = score ;
this.rank = rank ;
}
var playerOne = new Player ( "Craig" , 199 , "1st" ) ;

以下是我以前做过的方式;

var playerOne = {name: "Craig" , score: 199 , rank: "1st"} ;
var playerTwo = {name: "Tohny" , score: 155522 , rank: "2nd"} ;

4 个答案:

答案 0 :(得分:4)

主要区别在于第一个在其“原型链”中会有一个额外的对象。原型链是您在JavaScript中继承的方式。

因此,您可以扩展该对象,并且从Player构造函数创建的所有对象都将继承这些项。

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" ) ;

所以现在playerOne对象将继承getNameRank()方法,而使用对象文字语法创建的其他对象将不受影响。

var nr = playerOne.getNameRank();

console.log(nr); // Craig:1st

您在JavaScript中创建的所有(最常见的)对象将继承自Object.prototype对象。第二个示例中的对象文字语法具有该对象,并且只有该对象位于原型链中。

构造函数中的对象首先包含Player.prototype,然后是Object.prototype

答案 1 :(得分:0)

第一个代码示例是构造函数。根据我的理解,这是一种更强类型的创建对象的方式,因为已经定义了该对象的参数和成员。

第二个代码示例做同样的事情,但没有什么定义对象实际应该包含什么或它应该如何表现。这并不是一件坏事,但对于某些情况来说,它远没有那么好,也没有像构造函数那样给你多功能性。

答案 2 :(得分:0)

  

但有什么区别?

第一个使用构造函数,第二个使用对象初始值设定项

  

使用每一个都有优点/缺点吗?

是:

  • 构造函数可以重复使用并且具有逻辑,因此当您需要创建具有相同特征的多个对象时,这些函数很有用。当你编写一堆代码后需要修改这些特性时,特别好,因为创建对象的代码很好并且包含在内。
  • 构造函数可以将原型分配给它们创建的对象。如果将属性放在Player.prototype上,则通过new Player创建的对象可以访问这些属性,因为这些对象由创建时分配给它们的原型备份。您无法使用对象初始值设定项执行此操作。 (如果将对象初始值设定项与ECMAScript5的Object.create组合,则可以执行此操作。)
  • 对象初始值设定项在使用时是显式且相当清晰的,因为您可以看到您正在创建的每个属性的名称,而由于构造函数的参数基于您提供它们的顺序,因此在创建对象时可能不太清楚(例如,使用构造函数)。事实上,有时您会看到构造函数接受一个对象作为它们的参数,然后使用该对象的属性来填充它们正在创建的对象。

答案 3 :(得分:0)

您可以通过两种方式在JavaScript中创建对象。

  1. 函数构造函数(与new关键字一起使用)
  2. 对象文字(你展示的第二种方式)。
  3. 但实际上,第二种方法只是以下的替代语法:

    var playerOne = new Object();
    playerOne.name = "Craig";
    playerOne.score = 199;
    playerOne.rank = "1st";
    // ...