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>
//创建对象的方式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>
相关文章推荐
- JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)
- JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)
- JavaScript中创建对象的方法:工厂模式,构造函数模式, 原型模式
- js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
- js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
- javascript工厂模式和构造函数模式创建对象方法解析
- JavaScript对象创建的几种方式及使用方法
- JavaScript对象创建的几种方式及使用方法
- JavaScript六种比较常见的原型创建对象的方法
- JS面向对象的几种创建方式:工厂模式、构造函数模式、原型模式、混合模式、动态原型模式
- JS中定义对象方式一:基于已有对象扩充其属性和方法
- JavaScript对象的创建之基于原型方式
- javascript基础(this,工厂方法来创建对象,构造函数创建对象)(十六)
- JavaScript对象的创建之基于构造方法+原型方式
- js-JavaScript常见的创建对象的几种方式
- javascript面向对象(七)原型另外的作用--扩充对象的属性和方法
- JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
- javascript创建对象和属性的几种方式
- javascript中创建自定义类型的最常见的方式_组合使用构造函数模型和原型模式,动态原型模式