哪种方式最适合在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;
定义一个函数有很多种方法。 这是完全根据您的要求。 以下是几种风格:
- 对象构造函数
- 文字构造函数
- 基于function
- 基于原型
- 基于function和原型
- 基于Singleton
例子:
- 对象构造函数
var person = new Object(); person.name = "Anand", person.getName = function(){ return this.name ; };
- 文字构造函数
var person = { name : "Anand", getName : function (){ return this.name } }
- 函数构造函数
function Person(name){ this.name = name this.getName = function(){ return this.name } }
- 原型
function Person(){}; Person.prototype.name = "Anand";
- 函数/原型组合
function Person(name){ this.name = name; } Person.prototype.getName = function(){ return this.name }
- 独生子
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';