Object javascript基础--对象封装( 三 )


function SpecialArray(){var values = new Array();values.push.apply(values, arguments);values.toPipedString = function(){return this.join("|"); };return values; }var a = new SpecialArray(2,6,8,9,4);a.toPipedString();//2|6|8|9|4
上面是网上随便找的一段关于创建数组对象的例子,我们还是改写我们的例子
function Person(name,sex){var o = new Object();o.name =name;o.sex = sex;o.say = function(){console.log(this.name + ' is '+ this.sex)};return o;}//与工厂模式的区别就是调用的时候加上了new关键字,工厂模式直接调用函数var Tom = new Person('Tom','male');var Linda = new Person('Linda','female');
那么就有人问了,这寄生构造函数模式又产生什么结果呢?其实答案和工厂模式输出结果一模一样 。那有了工厂模式了,寄生构造模式是不是多余的呢?借用高程书上的原话:
书上原话:除了使用new操作符并把使用的包装函数叫做构造函数之外,这个模式跟工厂模式其实是一模一样的 。构造函数在不返回值的情况下 。默认会返回新对象实例 。而通过在构造函数的末尾添加一个语句,可以重写调用构造函数时返回的值 。
结束语
【Objectjavascript基础--对象封装】对象涉及封装和继承,继承放在后一片文章去讲 。弄了这么一通,对象封装也就6个模式,寄生构造函数模式跟工厂模式没有什么大区别,而且我们经常用的是组合模式和动态原型模式 。所以实践看起来是要比学习单纯许多 。哈哈