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();




自己看没排版。

posted @ 2011-10-29 00:18  LHV  Views(818)  Comments(0)    收藏  举报