用原型实例指向创建对象的类,使用于创建新的对象的类共享原型对象的属性以及方法。
用于子类继承父类,为了提高性能,对于每次创建的一些简单的而又有差异化的属性可以放在构造函数中,将一些消耗资源比较大的方法放在基类的原型中,这样就可以避免不必要的消耗,这就是原型模式的雏形。
原型模式更多的是用在对象的创建上,比如创建一个实例对象的构造函数比较复杂或者耗时比较长,或者通过创建多个对象来实现。此时最好不要用new关键字去复制这些基类,可以通过对这些对象属性或者方法进行复制来实现创建,首先要有一个原型对象的复制方法。
// 原型对象复制方法 function prototypeExtend() { var F = function() {}, args = arguments, i = 0, len = args.length; for (; i < len; i++) { // 遍历每个模板对象中的属性 for(var j in args[i]) { F.prototype[j] = args[i][j]; } } // 返回缓存类实例 return new F(); }
var MyPage = prototypeExtend({ dataType: 'string', js: function() { console.log('js的数据类型有' + this.dataType); }, php: function() { console.log('php的数据类型有' + this.dataType); } })