什么是原型模式
类并不是必须的,对象未必需要从类中创建而来,一个对象是通过克隆另外一个对象所得到的。
原型模式不但是一种设计模式,也被称为一种编程泛型。
ECMAScript5提供了Object.create方法,可以用来克隆对象。
但是create方法性能不如 var obj = {} 或者 var obj = new Object();
以上两种替代方式,内部都是克隆原型而得到对象。
注: Javascript中的根对象是Object,所有的对象都从根对象克隆而来。
函数式例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
(function () {
var Beverage = function () {}; Beverage.prototype.boilWater = function () { console.log('把水煮沸。'); };
Beverage.prototype.brew = function () { throw new Error('子类必须重写冲泡方法'); };
Beverage.prototype.poutInCup = function () { throw new Error('子类必须重写把饮料倒入杯子方法'); };
Beverage.prototype.addCondiments = function () { throw new Error('子类必须重写加调料方法'); };
Beverage.prototype.customerAddCondiments = function () { return true; } Beverage.prototype.init = function () { this.boilWater(); this.brew(); this.poutInCup(); if (this.customerAddCondiments()) { this.addCondiments(); } }
var Coffee = function () {}; Coffee.prototype = new Beverage();
Coffee.prototype.brew = function () { console.log('冲泡咖啡'); };
Coffee.prototype.poutInCup = function () { console.log('把咖啡倒进杯子'); };
Coffee.prototype.addCondiments = function () { console.log('给咖啡加糖加牛奶'); };
Coffee.prototype.customerAddCondiments = function () { return window.confirm('请问需要调料吗?'); }
var coffee = new Coffee(); coffee.init();
})();
|