您的位置:首页 > Web前端 > JavaScript

Javascript创建对象的几种方式

2011-11-25 11:25 519 查看
1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义

优点:动态的传递参数

缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存

function User1(name, password) {
this.name = name;
this.password = password;
this.login = function(name,password){
if(this.name == name && this.password == password) {
return true;
}else {
return false;
}
};
}

2.原型方式,将对象属性及方法定义都写在对象的prototype里面

优点:每次创建对象时都是使用相同prototype中的方法,不会占用重复的内存

缺点:无法动态传递构造参数

function User2() {

}
User2.prototype.name = "prototype name";
User2.prototype.password = "prototype password";
User2.prototype.login = function(name,password){
if(this.name == name && this.password == password) {
return true;
} else {
return false;
}
};
原型方式的另一种写法:
格式:
var 对象名 = {};
对象名.prototype.变量1=变量1的值;
对象名.prototype.变量2=变量2的值;
……;
对象名.prototype.函数1= function() {
函数体
};
对象名.prototype.函数2= function() {
函数体
};
……;
说明:
(1)初始对象体内可以不定义任何东西;
(2)在要定义的变量前加“对象名.prototype.”的格式;
(3) 对象的内容与值以等号分隔,成对出现;
(4) 包含的变量或者函数之间以分号分隔,也可以省去分号。
(5) 函数需要写在function(){}的大括号之内。
例子:
var data = {};
data.prototype. name ="Vicky”;
data.prototype. age =20;
data.prototype. eat = function() {
alert(‘I wanna eat meat’);
};
data.prototype. sleep= function() {
alert(‘I wanna sleep’);

};

3.构造及原型混合方式,将属性定义写在构造方式里面,方法写在prototype里面

优点:综合了construct及prototype方式的优点,可以动态传递构造参数,并且方法函数对象也只创建一个

缺点:函数写在对象外面,不太符合面向对象的思想

function User3(name,password) {
this.name = name;
this.password = password;
}
User3.prototype.login = function(name,password) {
if(this.name == name && this.password == password) {
return true;
} else {
return false;
}
};

4.动态原型方式:加一个判断属性,来判断该对象是否已经被创建过,如果被创建过,则方法就不在构建

优点:将原型函数写在对象定义里面

缺点:不支持继承

function User4(name,password) {
this.name = name;
this.password = password;
if(typeof User4.__initialized == "undefined") {
User4.prototype.login = function(name,password){
if(this.name == name && this.password == password) {
return true;
} else {
return false;
}
};
User4.__initialized = true;
}
}

5、JSON方式/对象直接量

格式:

var 对象名 = {

变量1: 变量1的值,

变量1: 变量1的值,

……,

函数1: function() {

函数体

},

函数2: function() {

函数体

}//Note:最后的逗号要去除为了和IE兼容。

};

说明:

(1)大括号内直接填写变量或者函数;

(2)对象的内容与值以冒号分隔,成对出现;

(3)包含的变量或者函数之间以逗号分隔;

(4)函数需要写在function(){}的大括号之内。

例子:

var 对象名 = {

name: “Vicky”,

age: 26,

eat: function() {

alert(‘I wanna eat meat’);

},

sleep: function() {

alert(‘I wanna sleep’);

}

};

注释:类似的方式也叫做匿名类

匿名类举例:

{

index: '//',

reg: new RegExp('^//.*$'),

css: "comment"

}

上面的方式创建了类,只是没赋给一个变量而已。

仔细看会发现这种方式和定义json对象很像,只不过定义json对象的键值必须为字符串,如下所示:

var user={"name":"Vicky","age":26,"gendor":"男"};

当Javascript对象中只有属性时,可以调用json官网提供的json2.js文件中的stringify函数先将Javascript对象转换为字符串,然后在字符串的两端添加左右括号,再调用eval函数就可以得到json对象了。

var user={name:"Vicky",age:26,gendor:"男"};

var str=JSON2.stringify(user);

var json=eval('('+str+')');

alert(json.name);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: