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

js对象定义

2011-10-29 00:18 134 查看
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();


自己看没排版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: