前端開發設計模式有:1、模組模式;2、建構函式模式;3、工廠模式;4、混合模;5、單例模式;6、訂閱發佈模式等等。
常用的前端開發設計模式有:模組模式,建構函式模式,工廠模式,混合模式,單例模式以及訂閱-發布模式。
前端開發設計模式
#模組模式:
立即執行函數表達式中定義的變數和方法在外界是存取不到的,只能透過其向外部提供的介面,"有限制"地存取.透過函數作用域解決了屬性和方法的封裝問題.
var Person = (function(){ var name = "xin"; var age = 22; function getName(){ return name; } function getAge(){ return age; } return { getName: getName, getAge: getAge } })(); console.log(age); // 报错:age未定义 console.log(name); // 报错:name未定义 console.log(Person.age); // undefined console.log(Person.name); // undefined只能通过Person提供的接口访问相应的变量 console.log(Person.getName()); // xin console.log(Person.getAge()); // 22
建構子模式
function Person(name,age){ this.name = name; this.age = age; } Person.prototype = { constructor: Person; printName: function(){ console.log(this.name); }, printAge: function(){ console.log(this.age); } }var person = new Person('xin', 22); person.printName(); // xin person.printAge(); // 22
#混合模式
#function Person(name,age){ this.name = name; this.age = age; }; Person.prototype.printName = function(){ console.log(this.name); }function Student(name,age){ //继承 Person 的属性 Person.call(this,name,age); }function create(prototype){ function F(){}; F.prototype = prototype; return new F(); } //让Student的原型指向一个对象,该对象的原型指向了Person.prototype,通过这种方式继承 Person 的方法 Student.prototype = create(Person.prototype); Student.prototype.printAge = function(){ console.log(this.age); }var student = new Student('xin',22); student.printName(); // "xin"
工廠模式
function Person(name, age){ var person = new Object(); person.name = name; person.age = age; person.printName = function(){ console.log(this.name); }; person.printAge = function(){ console.log(this.age); } return person; } var person = Person('xin',22);
單例模式
var Singleton = (function (){
var instance;
function init(){
return {
};
} return {
getInstance: function(){
if(!instance){
instace = init();
} return instance;
}
};
})();
#發布-訂閱模式又叫做觀察者模式,定義了物件之間一對多的依賴關係,當一個物件的狀態改變時,所有依賴與它的物件都將得到通知.發布-訂閱模式廣泛應用於非同步程式設計之中,是一種替代回調函數的方案.多個事件處理函數可以訂閱同一個事件,當該事件發生後,與其相對應的多個事件處理函數都會運行取代對象之間硬編碼的通知機制,一個對像不用再顯示的調用另外一個對象的某個介面,降低模組之間的耦合程度,雖然不清楚彼此的細節,但是不影響他們之間相互通信
#應用DOM事件#########DOM事件是一種典型的發布-訂閱模式,對一個dom節點的一個事件進行監聽,當操作dom節點時,觸發對應的事件,回應函數執行.事件函數對dom節點完全未知,不用去理會是什麼事件,如何觸發,執行就好.#########自訂事件#########指定發布者"發布-訂閱"這種關係用一個物件表示,鍵表示事件名稱,值是一個由事件處理程序組成的陣列,相當於訂閱者的花名冊發布訊息後,遍歷快取列表,依次執行訂閱者的回調函數###
var EventCenter = (function(){ //将所有的"发布-订阅"关系放到events中 var events = {}; //给事件绑定事件处理程序, function on(evt, handler){ //evt:事件名,handler:事件处理程序 events[evt] = events[evt]||[]; events[evt].push({ handler:hander }); } //发布消息(触发事件),并执行相应的事件处理程序 function fire(evt,args){ //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 } })();
var Event = (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); } } 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.on('click', function(val){ console.log('click.... now val is '+ val); }) Event.fire('change', 'xin'); Event.fire('click', 'xin'); Event.off('change');
以上是常用的前端開發設計模式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!