JavaScript设计模式
2017-05-07 本文已影响0人
check_ping
一、单例模式
单例模式是指一个实例对象的唯一性,既保持这个对象是唯一的,常见的有两种做法:第一种是给实例一个命名空间,以区分其他同类实例;第二种是如若此实例存在,则不再创建,不存在,则创建
比如说点击一个按钮,弹出一个弹窗,这样做就保证了永远只创建一个mask,并且会记录在浏览器内存中。每次向body中appendChild的都是同一个mask,并且不会append多个。
var showDialog = (function (){
var mask = mask || document.createElement("div");
// mask => <div></div>
return function(){
document.body.appendChild(mask);
}
})();
btn.onclick = function(){
showDialog ();
}
二、构造函数模式
通过一个构造函数(构造器)来创建实例,每个实例的拥有的属性相同,属性的值不同。
function Dog (name){
if(!(this instanceof Dog)){
return new Dog(name);
}
// 上面代码在下方解释
var _name = name? name : '小花';
this.name = _name;
this.getName = function(){
console.log(this.name);
}
}
var dog1 = Dog();
dog1.getName();
var dog2 = Dog("小白");
dog2.getName();
为什么上面代码在构造器中return 一个实例,这是因为创建一个实例,如果使用new关键字,构造函数就要依次将方法赋给这个实例,会浪费性能;如果不用new关键字,这个对象将不能拥有构造函数中的方法,但是能拥有原型上的方法,这也是为什么一个构造函数的方法都要放在原型上,这样我们就不需要用new关键字了,从而节省了性能。
上面代码中,通过一个判断,这个实例是否是这个构造函数创建的,没有用new创建,则不能拥有这个构造函数的方法,但第二次创建实例将不再执行此代码,因为构造函数上的方法已被缓存在浏览器中,所以这也同样能起到节省性能的作用。
三、建造者模式
未完,待续......