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

javascript面向对象和原型

2016-04-24 11:17 627 查看
模式

//构造函数+原型模型
function Box(name,age){   //保持独立的用构造函数
this.name=name;
this.age=age;
this.family=['哥哥','姐姐','弟弟'];

}

Box.prototype={            //保持共享的用原型模型
constructor:Box,
run:function(){
return this.name + this.age + this.family;
}
}

var box1 = new Box('Lee',100);
// alert(box1.run());
box1.family.push('妹妹');
alert(box1.family);

var box2 = new Box('Jack',200);
// alert(box2.run());
alert(box2.family);    //引用类型没有使用原型,所以没有共享


动态原型

//动态原型模型,可以将原型封装到原型,每次运行都要初始化一次
function Box(name,age){
this.name=name;
this.age=age;
this.family=['哥哥','姐姐','弟弟'];

//    alert("原型初始化开始");
// Box.prototype.run = function(){
//     return this.name + this.age + this.family;
// }
// alert("原型初始化结束");

if(typeof this.run != 'function'){    //判断run是否存在,即是否已初始化
alert("原型初始化开始");
Box.prototype.run = function(){
return this.name + this.age + this.family;
}
alert("原型初始化结束");
}
}

var box1 = new Box('Lee',100);
alert(box1.run());

var box2 = new Box('Jack',200);
alert(box2.run());


工厂模型

工厂模式
function Object(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function(){

}
return obj;
}


寄生构造函数模型

//寄生构造函数模式
function Box(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function(){
return name + age;
}
return obj;
}


稳妥构造函数模型

//稳妥构造函数,函数体不能用this,实例化不能用new
function Box(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function(){
return name + age;
}
return obj;
}
var box1 = Box('Lee',100);
alert(box1.run());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: