哪种方式最适合在javascript中创build对象? 对象的variables之前是否需要“var”?

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

我还看到,在所有这些例子中,关键字“var”在属性之前没有被使用,为什么? 没有必要在属性的名称之前声明“var”,因为它提到Properties是variables。

我忘了再问一件事:

在方法2和方法3中,对象的名称是大写的,在方法1中,对象的名称是小写的…我们应该使用什么样的对象名称?

方法1

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

方式2

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

方式3(使用数组语法的JavaScript对象):

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

没有最好的办法,这取决于你的用例。

  • 使用方法1,如果你想创build几个类似的对象。 在你的例子中, Person (你应该用大写字母开头的名字)被称为构造函数 。 这与其他面向对象语言的相似。
  • 如果您只需要一种对象 (如单例),请使用方法2 。 如果你想从另一个inheritance这个对象,那么你必须使用一个构造函数。
  • 如果要根据对象的其他属性初始化对象的属性,或者如果您有dynamic属性名称,请使用方法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; 

dynamic属性名称:

如果属性名称存储在某个variables中或者通过某个expression式创build,则必须使用括号表示法:

 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; 

定义一个函数有很多种方法。 这是完全根据您的要求。 以下是几种风格:

  1. 对象构造函数
  2. 文字构造函数
  3. 基于function
  4. 基于原型
  5. 基于function和原型
  6. 基于Singleton

例子:

  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" } 

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

没有“最好的方法”来创build一个对象。 每种方式都有好处,取决于你的用例。

构造函数模式(一个函数与new运算符配对以调用它)提供了使用原型inheritance的可能性,而其他方式则不然。 所以,如果你想要原型inheritance,那么构造函数是一个好方法。

但是,如果你想要原型inheritance,那么你可以使用Object.create ,这使得inheritance更加明显。

创build一个对象字面值(例如: var obj = {foo: "bar"}; )如果在创build时碰巧拥有所有您希望设置的属性,那么这个效果很好。

为了稍后设置属性,如果知道属性名称, NewObject.property1语法通常比NewObject['property1']更可取。 但是,如果事先没有提供属性名称(例如: NewObject[someStringVar] ),后者很有用。

希望这可以帮助!

我想这取决于你想要的。 对于简单的对象,我想你可以使用第二种方法。 当你的对象变大,你打算使用类似的对象,我想第一种方法会更好。 这样,你也可以使用原型来扩展它。

例:

 function Circle(radius) { this.radius = radius; } Circle.prototype.getCircumference = function() { return Math.PI * 2 * this.radius; }; Circle.prototype.getArea = function() { return Math.PI * this.radius * this.radius; } 

我不是第三种方法的忠实粉丝,但它对dynamic编辑属性非常有用,例如var foo='bar'; var bar = someObject[foo]; var foo='bar'; var bar = someObject[foo];

有很多方法可以在JavaScript中创build对象。 使用constructer函数来创build对象或对象文字符号在JavaScript中使用很多。 同时创build一个Object的实例,然后添加属性和方法,有三种常见的方法来在JavaScript中创build对象。

Constructer函数

有一些内置的构造函数,我们都可以使用它们,例如Date(),Number(),Boolean()等,所有的构造函数都以大写字母开头,同时我们可以在JavaScript中创build自定义的构造函数喜欢这个:

 function Box (Width, Height, fill) { this.width = Width; // The width of the box this.height = Height; // The height of the box this.fill = true; // Is it filled or not? } 

你可以调用它,只需使用new()来创build构造函数的新实例,创build如下所示的元素,然后用填充的参数调用构造函数:

 var newBox = new Box(8, 12, true); 

对象文字

使用对象文字是在JavaScript中创build对象的一个​​很好的例子,这是创build一个简单对象的例子,只要定义了对象属性,就可以将任何东西分配给对象属性:

 var person = { nose: 1, feet: 2, hands: 2, cash: null }; 

原型

在创build一个对象之后,可以将更多的成员原型化,例如在我们的Box中添加颜色,我们可以这样做:

 Box.prototype.colour = 'red';