1、工廠方式
<script type="text/javascript">
function createObject(name){
var p = new Object();
p.name=name;
p.say = function(){alert(p.name+'ff');}
return p;
}
var p1 = createObject("p1");
var p2 = createObject("p2");
alert(p1.name+" "+p2.name);
p1.say();p2.say();
alert(p1.say==p2.say); //false
</script>
問題:每創(chuàng)建一個(gè)對(duì)象,對(duì)象的方法是新對(duì)象,浪費(fèi)資源
2、 構(gòu)造函數(shù)方式
<script type="text/javascript">
function Person(name){
this.name = name;
this.say = function(){
alert("I am "+this.name);
}
}
var p1 = new Person("wang");
var p2 = new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say); //false
</script>
問題:創(chuàng)建對(duì)象時(shí)比工廠方法更于理解。和工廠方法一樣,每個(gè)對(duì)象都有自己的方法,浪費(fèi)資源.
3、 原型方式
function Person(){}
Person.prototype.name="";
Person.prototype.say=function(){
alert("I am"+this.name);
}
var p1=new Person();
var p2=new Person();
alert(p1.say==p2.say);//true
問題:無法在構(gòu)造方法中傳遞參數(shù),所有對(duì)象共享屬性。
優(yōu)點(diǎn):對(duì)象共用方法,節(jié)約資源的。
4、 構(gòu)造方法+原型方式
function Person(name){
this.name=name;
}
Person.prototype.say=function(){
alert("I am"+this.name);
}
var p1=new Person("wang");
var p2=new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say);//true
優(yōu)點(diǎn):解決了前面提到的問題
問題:封裝不夠完美。
5、 動(dòng)態(tài)原型方式
function Person(name){
this.name=name;
if(Person.prototype.say==undefined){
Person.prototype.say=function(){
alert("I am "+this.name);
}
}
}
var p1=new Person("wang");
var p2=new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say);//true
結(jié)論:一種完美的解決方案。
6、 對(duì)象的創(chuàng)建--JSON
var person={};
var girl={
name:"miss wang",
age:20,
show=function(){
alert("my name is "+this.name);
}
}