** 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。**
-
單例模式
var People = (function(){ var instance; function init(name){ //定義私有變量和方法 return { //定義共有變量和方法(可以訪問私有變量和方法) sayName:function(){ console.log(name); } }; } return { getInstance:function(name){ if(!instance){ instance = init(name); } return instance; } } }()); var p1 = People.getInstance("jack"); var p2 = People.getInstance("keanu"); p1 == p2; //true //console.log(p1 == p2);
-
構(gòu)造函數(shù)模式
function Person(name) { this.name = name; } Person.prototype = { say: function () { console.log(this.name) } } var p2 = new Person('Rick');
-
混合模式 -繼承
var Person = function (name,age) { this.name = name; this.age = age; } Person.prototype = { sayName: function () { console.log(this.name) } } var Student = function (name,age,score) { Person.call(this,name,age); this.score = score; } //Student.prototype = Object.create(Person.prototype) Student.prototype = create(Person.prototype) function create(fn) { function F(){}; F.prototype = fn; return new F() } Student.prototype.constructor = Student; Student.prototype.sayScore = function(){ console.log(this.score); } var student = new Student('Nick',23,90)
-
模塊模式
var Person = (function(){ function changeName(name) { this.name = name; } function sayName() { console.log(this.name) } return{ change: changeName, say: sayName } })()
-
工廠模式
var People=function(name,age){ return { name:name, age:age, sayName:function(){ console.log('my name is '+this.name); }, setAge:function(age){ this.age=age; }, getAge:function(){ console.log(this.age); } } } var p3=People('jack',24); p3.sayName(); p3.getAge(); p3.setAge(27); p3.getAge();
-
發(fā)布訂閱模式
<script type="text/javascript"> var EventCenter = (function(){ var events = {}; function on(evt, handler){ events[evt] = events[evt] || []; events[evt].push({ handler: handler }); } function fire(evt, args){ if(!events[evt]){ return; } for(var i=0; i<events[evt].length; i++){ events[evt][i].handler(args); } } return { on: on, fire: fire } })(); EventCenter.on('my_event', function(data){ console.log('my_event ...'); }); EventCenter.fire('my_event'); </script>
-
** 使用發(fā)布訂閱模式寫一個(gè)事件管理器,可以實(shí)現(xiàn)如下方式調(diào)用**
var Event=(function(){ var events={}; function on(evt,handler){ events[evt]=events[evt] || []; events[evt].push({ handler:handler }) } function fire(evt,arg){ if(!events[evt]){ return } for(var i=0;i<events[evt].length;i++){ events[evt][i].handler(arg) } } function off(evt){ delete events[evt]; } return { on:on, fire:fire, off:off } }()); Event.on('change', function(val){ console.log('change... now val is ' + val); }); Event.fire('change', '饑人谷'); //change... now val is 饑人谷 Event.off('change');
設(shè)計(jì)模式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 使用發(fā)布訂閱模式寫一個(gè)事件管理器...
- 問答 1.寫出構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 工廠模式,想造什么造什么...
- 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡單...
- 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。構(gòu)造函數(shù)模式var Person ...
- 一、構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例 單例模式單例就是保證一個(gè)類只有一個(gè)實(shí)...