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); } }
这种模型方式集上述两种模式的长处;
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; }