- 原型对象虽然可以对所有实例的属性和方法共享,但是它的局限性也是很明显的,正是因为共享的特性,也导致原型存在的最大问题。
- 我们一般组合使用构造函数式和原型模式,在实际开发中,这种模式也是应用的最为广泛。
- 动态原型模式:就是把信息都封装到函数中,这样体现了封装的概念。
- 稳妥构造函数式:所谓稳妥模式就是没有公共属性,而且其他方法也不引用this对象,稳妥模式最适合在安全的环境中使用。如果你的程序对于安全性要求很高,那么非常适合这种模式。
//原型感念:原型对象里的所有属性和方法,会被所有构造函数实例化出来的对象所共享
function Person(){
}
Person.prototype = {
constructor : Person,
name : 'z3',
age : 20,
friends : ['王五','赵六'],
sayName : function(){
console.log('我的名字:'+this.name);
}
}
var p1 = new Person();
var p2 = new Person();
//原型对象缺点:添加一个数据,会被所有实例化对象所共享
p1.friends.push('小七');
console.log(p1.friends);
console.log(p2.friends);
/*-----------------------------------------------*/
//使用组合模式,原型和构造函数式(定义一个类,开发常用的方式)
function Person(name,age,friends){
this.name = name;
this.age = age;
this.friends = friends;
}
Person.prototype = {
constructor : Person,
sayName : function(){
console.log('我的姓名:'+this.name);
}
}
var p1 = new Person('z3',50,['1','2','3']);
var p2 = new Person('v3',10,['4','5','6']);
console.log(p1.friends);
p1.sayName();
console.log(p2.friends);
//动态原型模式,让代码都封装到一起
function Person(name,age,friends){
this.name = name;
this.age = age;
this.friends = friends;
//动态原型方法
if(typeof this.sayName != 'function'){
Person.prototype.sayName = function(){
console.log(this.sayName);
}
}
}
var p1 = new Person('111',20,50);
p1.sayName();
//稳妥构造汗属性:durable Object(稳妥对象) 非常安全的环境中
//要求,1:没有公共属性,2:不能使用this对象
function Person(name,age,friends){
//创建要给返回的对象
var obj = new Object();
//定义私有属性和变量
var name = name;
//添加一个方法
obj.sayName = function(){
console.log(name);
}
return obj;
}
var p1 = new Person('z3');
p1.sayName();