javascript中的对象

(1)基于已有的对象,扩充其属性和方法

View Code
var obj=new Object();
obj.name="小张";
obj.sayName=function(name){
this.name=name;
return this.name;
}

alert(obj.sayName("小李"));

(2)工厂方式创建对象

View Code
function createOjbect(name,password){
var obj=new Object();
obj.name=name;
obj.password=password;
obj.get=function(){
alert(this.name+ " : "+this.password);
}
return obj;
}

var obj1=createOjbect("小张",123);

工厂方式创建对象改进

View Code
    function createOjbect(name,password){
var obj=new Object();
obj.name=name;
obj.password=password;
obj.get=method;
return obj;
}
//让一个函数函数对象被多个对象所共享,而不是每一个对象拥有一个函数对象。如果不这样做,就很消耗内存
var method=function(){
alert(this.name+ " : "+this.password);
}

var obj1=createOjbect("小张",123);
obj1.get();

(3)构造函数创建对象

View Code
function person(name,password){
//在执行第一句代码前,js引擎为我们生成一个对象
this.name= name;
this.password=password;
this.getInfo=function(){
alert(this.name+" : "+this.password);
}

//此处有一个隐藏的return 语句,用户将之前生成的对象返回
}

var p=new person("小张",123); //此处用new 的方式告诉js引擎,我要生成对象了
p.getInfo();

(4)使用原型(prototype)方式创建对像

View Code
/*
单纯使用原型方式定义类无法在狗仔函数中为属性赋初值,只能在对象生成后再去改变属性值
如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一对象改变了属性也会反映到其他对象当中(只针对引用数据类型)
*/


function person()
{

}
person.prototype.name=new Array();
person.prototype.sex="男";
person.prototype.getInfo=function(){
alert(this.name+" : "+this.sex);
}

var person1=new person();
var person2=new person();

person1.name.push("小张","小李子");
person1.sex="女";
alert(person1.name+" : "+person1.sex);
alert(person2.name+" : "+person2.sex);

原型+构造方式来构造对象

View Code
function person(){
this.name=new Array();
this.sex="男";
}
person.prototype.getInfo=function(){
alert(this.name+" : "+this.sex);
}

var person1=new person();
var person2=new person();
person1.name.push("小明");
person2.name.push("小张","小丽");

person1.sex="女";

person1.getInfo();
person2.getInfo();

(5)动态原型方式:在构造函数中通过标识量让所有对象共享一个方法,

而每个对象拥有自己的属性.

View Code
function Person(){
this.username="小张";
this.password=123;
if(typeof Person.flag=="undefined")   //此方法是对个对象共享的。
{
Person.prototype.getInfo=function(){
alert(this.username+" : "+this.password);
}
Person.flag=true;  //标识量
}
}
var person1=new Person();
var person2=new Person();
person2.password=345;
person2.username="小明";

person1.getInfo();
person2.getInfo();



 








posted @ 2012-04-03 22:46  unbreakable  阅读(166)  评论(0编辑  收藏  举报