function Person(name,age){
this.name = name
this.age = age
}
Person.prototype.sayName = function(){
return this.name
}
let student = new Person('tyy',25)
工廠模式
function craetePerson(name){
var person = {
name: name,
sayName: function(){
console.log(this.name)
}
}
return person
}
craetePerson('tyy')
單例模式
var People = (function(){
var instance
function init(name){
return {
name: name
}
}
return {
craetePeople: function(name){
if(!instance){
instance = init(name)
}
return instance
}
}
}())
People.craetePeople('tyy') //{name: 'tyy'}
People.craetePeople('yyt') //{name: 'tyy'}
單例模式內(nèi)部有次判定,當(dāng)?shù)诙蝿?chuàng)建時(shí)不會(huì)建立新的引用
模塊模式
var Person = (function(){
var name = 'tyy'
function sayName(){
console.log(name)
}
return {
name: name,
sayName: sayName
}
})()
訂閱發(fā)布模式
var EventCenter = (function () {
var events = {};
//('hello',function(){})
function on(evt, handler) {
//判斷events里有沒(méi)有events['hello'],如果沒(méi)有events['hello']=[]
events[evt] = events[evt] || [];
// events['hello']=[{ handler: handler}]
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);
// 遍歷數(shù)組,執(zhí)行handler
}
}
// 取消訂閱
function off(evt){
delete events[evt]
}
return {
on: on,
fire: fire,
off: off // 取消訂閱
}
})();
EventCenter.on('hello', function () { console.log('hello') })
EventCenter.fire('hello')