小编典典

哪种方式最适合在 JavaScript 中创建对象?在对象属性之前是否需要`var`?

all

到目前为止,我看到了三种在 JavaScript 中创建对象的方法。哪种方式最适合创建对象,为什么?

我还看到,在所有这些示例中,关键字var都没有在属性之前使用——为什么?var属性是变量,是不是不需要在属性名前声明?

在第二种和第三种方式中,对象的名称是大写的,而在第一种方式中,对象的名称是小写的。我们应该为对象名称使用什么大小写?

第一种方式:

function person(fname, lname, age, eyecolor){
  this.firstname = fname;
  this.lastname = lname;
  this.age = age;
  this.eyecolor = eyecolor;
}

myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");

第二种方式:

var Robot = {
  metal: "Titanium",
  killAllHumans: function(){
    alert("Exterminate!");
  }
};

Robot.killAllHumans();

第三种方式——神奇的avaScript对象使用数组语法

var NewObject = {};

NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }

阅读 134

收藏
2022-08-07

共1个答案

小编典典

没有 最好 的方法,这取决于您的用例。

  • 如果要创建多个类似的对象,请使用 方式 1 。 在您的示例中,Person(您应该以大写字母开头的名称)称为 构造函数 。这类似于其他 OO 语言中的
  • 如果您只需要 一种对象 (如单例),请使用 方式 2 。 如果您希望此对象从另一个对象继承,那么您必须使用构造函数。 __
  • 如果要根据对象的其他属性初始化对象的属性,或者如果您有动态属性名称,请使用 方式 3 。

更新: 根据第三种方式的要求示例。

相关属性:

以下不作为this参考book无法使用对象字面量中其他属性的值来初始化属性:

var book = {
    price: somePrice * discount,
    pages: 500,
    pricePerPage: this.price / this.pages
};

相反,你可以这样做:

var book = {
    price: somePrice * discount,
    pages: 500
};
book.pricePerPage = book.price / book.pages;
// or book['pricePerPage'] = book.price / book.pages;

动态属性名称:

如果属性名称存储在某个变量中或通过某个表达式创建,则必须使用括号表示法:

var name = 'propertyName';

// the property will be `name`, not `propertyName`
var obj = {
    name: 42
};

// same here
obj.name = 42;

// this works, it will set `propertyName`
obj[name] = 42;
2022-08-07