js 设计模式学习(3)
原型模式
将可复用的、可共享的、耗时大的从基类中提取出来,然后放在其原型中,然后子类通过组合继承或者寄生组合式继承将方法和属性继承下来。
1 //图片轮播类 2 var LoopImages = function (imgArr, container) { 3 this.imgArray = imgArr; 4 this.container = container; 5 } 6 LoopImages.prototype = { 7 createImage: function () { 8 console.log('creat img function'); 9 }, 10 changeImage: function () { 11 console.log('change img function'); 12 } 13 } 14 15 var SlideLoopImg = function (imgArr, container) { 16 //构造函数继承图片轮播类 17 LoopImages.call(this, imgArr, container); 18 } 19 20 SlideLoopImg.prototype = new LoopImages(); 21 //重写继承切换下一张图片的方法 22 SlideLoopImg.prototype.changeImage = function () { 23 console.log('SlideLoopImg Change Images'); 24 }
原型继承
通过prototypeExtend创建的是一个对象,我们无需再去NEW新的实例对象。
1 function prototypeExtend() { 2 var F = function () { }, 3 args = arguments, 4 i=0, 5 len = args.length; 6 7 for (; i < len; i++) { 8 for (var j in args[i]) { 9 F.prototype[j] = args[i][j]; 10 } 11 } 12 13 return new F(); 14 } 15 16 var penguin = prototypeExtend({ 17 speed: 20, 18 swim: function () { 19 console.log('游泳:' + this.speed); 20 }, 21 run: function (speed) { 22 console.log('奔跑:' + speed); 23 }, 24 jump: function () { 25 console.log('跳跃'); 26 } 27 })