js对象定义
js对象的定义有以下几种方法:
1.工厂方式
2.构造函数方式
3.原型方式
分别介绍下
1.工厂方式
1 function CreateMyObj(key, value) {
2 var myObj = new Object;
3 myObj.key = key; //"I'm is a Key";
4 myObj.value = value; //"I'm is a Value";
5 myObj.ShowMyInfo = function () {
6 alert("myInfo is key:" + this.key + ";value:" + this.value);
7 }
8
9 return myObj;
10 }
使用
var newMyObj1 = CreateMyObj("key1", "value1");
var newMyObj2 = CreateMyObj("key2", "value2");
newMyObj1.ShowMyInfo();
newMyObj2.ShowMyInfo();
问题:
其中的ShowMyInfo函数会在每次new时都从新创建,浪费!
办法:
function ShowMyObjInfo() {
alert("myInfo is key:" + this.key + ";value:" + this.value);
}
function CreateMyObj(key, value) {
var myObj = new Object;
myObj.key = key; //"I'm is a Key";
myObj.value = value; //"I'm is a Value";
myObj.ShowMyInfo = ShowMyObjInfo;
return myObj;
}
2.构造函数方式
function ShowMyObjInfo() {
alert("myInfo is key:" + this.key + ";value:" + this.value);
}
function MyObj(key, value) {
this.key = key; //"I'm is a Key";
this.value = value; //"I'm is a Value";
this.ShowMyInfo = ShowMyObjInfo;
}
var newMyObj1 = new MyObj("key1", "value1");
var newMyObj2 = new MyObj("key2", "value2");
newMyObj1.ShowMyInfo();
newMyObj2.ShowMyInfo();
3.原型方式
function MyObj() {
}
MyObj.prototype.key = "I'm is a Key";
MyObj.prototype.value = "I'm is a Value";
MyObj.prototype.myChildren = ["child1","child2"];
MyObj.prototype.ShowMyInfo = function () {
alert("myInfo is key:" + this.key
+ ";value:"
+ this.value+";myChildren:"+this.myChildren.join(","));
}
优点:
对象共享,不浪费!
问题:
1.没有参数
2.对象共享
试下如下代码便知道why
var newMyObj1 = new MyObj();
var newMyObj2 = new MyObj();
newMyObj1.myChildren.push("child3");
newMyObj1.ShowMyInfo();
newMyObj2.ShowMyInfo();
-------------------------------------------------
比较完美的方案:
构造函数+原型方式
function MyObj(key, value) {
this.key = key; //"I'm is a Key";
this.value = value; //"I'm is a Value";
this.myChildren = ["child1", "child2"];
}
MyObj.prototype.ShowMyInfo = function () {
alert("myInfo is key:" + this.key
+ ";value:"
+ this.value + ";myChildren:" + this.myChildren.join(","));
};
var newMyObj1 = new MyObj("key1","value1");
var newMyObj2 = new MyObj("key2","value2");
newMyObj1.myChildren.push("child3");
newMyObj1.ShowMyInfo();
newMyObj2.ShowMyInfo();
自己看没排版。

浙公网安备 33010602011771号