javascript中的对象
(1)基于已有的对象,扩充其属性和方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var obj=new Object();
obj.name="小张";
obj.sayName=function(name){
this.name=name;
return this.name;
}
alert(obj.sayName("小李"));
(2)工厂方式创建对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);
工厂方式创建对象改进
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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)构造函数创建对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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)方式创建对像
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/*
单纯使用原型方式定义类无法在狗仔函数中为属性赋初值,只能在对象生成后再去改变属性值
如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一对象改变了属性也会反映到其他对象当中(只针对引用数据类型)
*/
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);
原型+构造方式来构造对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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)动态原型方式:在构造函数中通过标识量让所有对象共享一个方法,
而每个对象拥有自己的属性.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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();