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

2022-08-30 01:49:26

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

我还看到,在所有这些示例中,关键字都未在属性之前使用 - 为什么?是否不必在属性名称之前声明属性是变量?varvar

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

第一种方式:

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

第三种方式 — 使用数组语法的 JavaScript 对象:

var NewObject = {};

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

答案 1

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

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

更新:作为第三种方式的示例。

从属属性:

以下内容不起作用,因为涉及 。无法使用对象文本中其他属性的值初始化属性:thisbook

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;

答案 2

有多种方法可以定义函数。它完全基于您的要求。以下是几种风格:-

  1. 对象构造函数
  2. 文本构造函数
  3. 基于功能
  4. 基于原型
  5. 基于功能和原型
  6. 基于单例

例子:

  1. 对象构造函数
var person = new Object();

person.name = "Anand",
person.getName = function(){
  return this.name ; 
};
  1. 文本构造函数
var person = { 
  name : "Anand",
  getName : function (){
   return this.name
  } 
} 
  1. 函数构造函数
function Person(name){
  this.name = name
  this.getName = function(){
    return this.name
  } 
} 
  1. 原型
function Person(){};

Person.prototype.name = "Anand";
  1. 功能/原型组合
function Person(name){
  this.name = name;
} 
Person.prototype.getName = function(){
  return this.name
} 
  1. 单身 人士
var person = new function(){
  this.name = "Anand"
} 

如果您有任何疑问,可以在控制台上尝试。