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

JavaScript中常见的几种创建对象的方式:基于对象扩充属性和方法、基于工厂方式创建对象、基于构造函数和基于原型

2011-10-06 01:47 1271 查看
<script>

//创建对象的方式1:基于对象的扩充其属性和方法。

var s=new Object();

s.name="zhangsan";

s.age=20;

s.say=function(){

alert(this.name+": "+this.age);

}

s.say();

//创建方式2:基于工厂方式创建(带参数的),最常用的。相当于构造函数

/* function createObject(name,age){

var s1=new Object();

s1.name=name; //要是不带参数可以写成s1.name="zhangsan"

s1.age=age; //要是不带参数的工厂方式,则可写成s1.age=20;

s1.say=function(){

alert(this.name+": "+this.age);

}

return s1;

}

*/

//下面这个函数对象为多个对象所共享(函数对象的定义写在构造函数外),而不是每个对象拥有一个函数对象(函数对象写在工厂方法内)

//这种方法是比上面的创建方法要好的。定义对象和定义对象方法时,二者分开定义。

function say(){

alert(this.name+": "+this.age);//谁调用这个方法,this指代谁。

}

function createObject(name,age){

var s1=new Object();

s1.name=name; //要是不带参数可以写成s1.name="zhangsan"

s1.age=age; //要是不带参数的工厂方式,则可写成s1.age=20;

s1.say=say;//调用多个对象共享的方法函数。

return s1;

}

var ob1=createObject("lisi",28);

ob1.say();

var ob2=createObject("zhaoliu",30);

ob2.say();

//创建方式3:构造函数式。

function person(name,age){

//在执行第一行语句前,js引擎会自动为我们创建一个对象

this.name=name; //要是不带参数可以写成s1.name="zhangsan"

this.age=age; //要是不带参数的工厂方式,则可写成s1.age=20;

//this.say=say;//调用多个对象共享的方法函数。

this.say=function(){

alert(this.name+": "+this.age);

}

//构造函数内隐藏有一个return返回语句,用语将刚才创建的对象返回

}

var p1=new person("zhangsan",29);//注意和工厂方式的不一致。

p1.say();

//创建方式4:原型方式prototype.

//无法再构造函数中为对象属性赋值。只能生成后再赋值。

//使用原型方式创建的所有对象,会共享原型中的属性,一个对象对属性的改变,会影响到其他对象的该属性。

function animal(){

}

// animal.prototype.name="lisi";

animal.prototype.name=new Array();

animal.prototype.age=20;

animal.prototype.say=function(){

alert("我是animal对象。"+this.name+": "+this.age);

}

var a=new animal();

a.name.push("animal1");

a.name.push("animal2");

a.age=10;

a.say();

var a2=new animal(); //则a2的name属性和a的一样。

a2.say();

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐