Jam*_*mna 172 javascript object
到目前为止,我看到了三种在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.");
Run Code Online (Sandbox Code Playgroud)
var Robot = {
metal: "Titanium",
killAllHumans: function(){
alert("Exterminate!");
}
};
Robot.killAllHumans();
Run Code Online (Sandbox Code Playgroud)
var NewObject = {};
NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 176
没有最好的方法,这取决于你的用例.
Person(您应该以大写字母开头的名称)称为构造函数.这类似于其他OO语言中的类.更新:作为第三种方式的请求示例.
依赖属性:
以下为不工作this也没有参考book.无法使用对象文字中的其他属性值初始化属性:
var book = {
price: somePrice * discount,
pages: 500,
pricePerPage: this.price / this.pages
};
Run Code Online (Sandbox Code Playgroud)
相反,你可以这样做:
var book = {
price: somePrice * discount,
pages: 500
};
book.pricePerPage = book.price / book.pages;
// or book['pricePerPage'] = book.price / book.pages;
Run Code Online (Sandbox Code Playgroud)
动态属性名称:
如果属性名称存储在某个变量中或通过某个表达式创建,则必须使用括号表示法:
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;
Run Code Online (Sandbox Code Playgroud)
Ana*_*ngh 110
定义函数有多种方法.它完全基于您的要求.以下是几种款式: -
var person = new Object();
person.name = "Anand",
person.getName = function(){
return this.name ;
};
Run Code Online (Sandbox Code Playgroud)
var person = {
name : "Anand",
getName : function (){
return this.name
}
}
Run Code Online (Sandbox Code Playgroud)
function Person(name){
this.name = name
this.getName = function(){
return this.name
}
}
Run Code Online (Sandbox Code Playgroud)
function Person(){};
Person.prototype.name = "Anand";
Run Code Online (Sandbox Code Playgroud)
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
return this.name
}
Run Code Online (Sandbox Code Playgroud)
var person = new function(){
this.name = "Anand"
}
Run Code Online (Sandbox Code Playgroud)
如果您有任何困惑,可以在控制台上试试.
jim*_*mbo 10
创建对象没有"最佳方法".每种方式都有好处,具体取决于您的用例.
构造函数模式(与new调用它的运算符配对的函数)提供了使用原型继承的可能性,而其他方式则没有.因此,如果您想要原型继承,那么构造函数是一个很好的方法.
但是,如果你想要原型继承,你也可以使用Object.create,这使得继承更加明显.
var obj = {foo: "bar"};如果您碰巧拥有希望在创建时手头设置的所有属性,则创建对象文字(例如)非常有用.
对于以后设置属性,如果您知道属性名称,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;
}
Run Code Online (Sandbox Code Playgroud)
我不是第三种方法的忠实粉丝,但它对于动态编辑属性非常有用var foo='bar'; var bar = someObject[foo];.
| 归档时间: |
|
| 查看次数: |
159272 次 |
| 最近记录: |