1泽示,寫出 構(gòu)造函數(shù)模式、混合模式蜜氨、模塊模式械筛、工廠模式、單例模式飒炎、發(fā)布訂閱模式的范例埋哟。
//單例模式范例
var Car = (function(){
var instance;
function init() {
//私有的變量和函數(shù)
var speed = 0;
return {
//定義公共的屬性和方法
getSpeed: function(){
return speed;
},
setSpeed: function( s ){
speed = s;
}
};
}
return {
getInstance: function() {
if (!instance) {
instance = init();
}
return instance;
}
};
}());
var car = Car.getInstance();
var car2 = Car.getInstance();
car === car2;
//工廠模式 ---通過函數(shù)創(chuàng)造一個對象 將其return出來
function createPeople(age,name,sex) {
var o= new Object();
o.age=age;
o.name=name;
o.sex=sex;
return o;
}
var p1=createPeople(18,"zhangsan","M"),
p2=createPeople(20,"lisi","F");
console.log(p1,p2)
//模塊模式
var People=(function () {
var name="laomingzi";
return{
changeName: function (newName) {
name=newName;
},
sayName:function () {
console.log(name)
}
}
}());
People.sayName();
People.changeName("xinmingzi");
People.sayName();
// 常見形式
var Car=(function () {
var carName="奔馳";
function sayCarName() {
console.log(carName)
}
return{
sayNameFunc:sayCarName
}
}());
Car.sayNameFunc()
//發(fā)布訂閱模式
//無傳參模式
EventCenter=(function () {
var events={};
return{
on:function (evt,handle) {
events[evt]=events[evt]||[];
events[evt].push(handle);
},
fire:function (evt) {
if (!events[evt]){ console.log("未綁定此事件"); return}
for(var i=0;i<events[evt].length;i++){
events[evt][i]()
}
},
unbind:function (evt) {
delete events[evt];
}
}
}())
//有參數(shù)模式
EventCenter=(function () {
var events={};
return{
on:function (evt,handle) {
events[evt]=events[evt]||[];
events[evt].push({handle:handle});
},
fire:function (evt,arg) {
if (!events[evt]){ console.log("未綁定此事件"); return}
for(var i=0;i<events[evt].length;i++){
events[evt][i].handle(arg)
}
},
unbind:function (evt) {
delete events[evt];
}
}
}());
2,使用發(fā)布訂閱模式寫一個事件管理器郎汪,可以實現(xiàn)如下方式調(diào)用
EventManager.on('text:change', function(val){
console.log('text:change... now val is ' + val);
});
EventManager.fire('text:change', '饑人谷');
EventManager.off('text:change');
var Event = (function (){
var events = {};
function on(evt, handle){
events[evt] = events[evt] || [];
events[evt].push({
handle:handle
});
};
function fire(evt,args){
if(!events[evt]){
return
}
for(var i=0; i<events[evt].length; i++){
events[evt][i].handle(args);
}
};
function off(){
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', '饑人谷');
}