javascript的面向对象程序设计(二)

2.4.5 原型对象的问题;

原型模式最大的特征是,在原型定义的属性,是被所有的实例所共有的,假如,原型对象有个属性时数组,你在实例上对这个数组添加元素,从而会改变所有实例都会受到影响

2.5

组合使用构造函数和原型模式;

代码如下:

function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.friend = ["zht","zgr"]

}
Person.prototype={
constructor:Person,
 sayName:function(){
    alert(this.name);
 }

}
View Code

这种模型方式集上述两种模式的长处;

2.6 动态原型模式;

还有一种方式,能够把代码都放在一个构造函数中;代码如下:

function Person(name,age,job){
 this.name = name;
 this.age = age;
 this.job = job;
 if(typeof this.sayName != "function"){
     Person.prototype.sayName = function(){
        alert(this.name);
     }
 }
}

注意:if语句的地方;这里只有在sayName方法不存在的情况下,才会把它加到原型对象中,也就是说,这段代码只有初次调用这个构造函数的时候才会执行;

2.6 寄生构造函数模式;

暂时对寄生构造函数的理解跟工厂模式没有差,除了把封装的那个函数叫做构造函数外,其他与工厂模式是一样的;(以后稍加学习);

2.7 稳妥构造函数模式;

所谓稳妥对象,指的是没有公共属性,而且其方法也不调用this对象;根据稳妥的要求,我们把Person的构造函数重写下,代码如下:

function Person(name,age,jon){
  var o = new Object();
  //可以在这里添加私有变量和方法;
 // 添加方法;
 o.sayName = function(){
  alert(name);

 }
// 返回对象;
return o;
}

 

posted @ 2015-07-24 17:14  坏婷坏婷  阅读(127)  评论(0编辑  收藏  举报