(安全)工厂方法模式
示例一:
var Demo = function () { }; Demo.prototype = { show: function () { alert('show'); } } var d = new Demo(); d.show();//执行成功 var d = Demo(); d.show();//执行失败
上面执行失败的原因:
在构造函数开始执行时,先判断当前对象this指代是不是当前类(Demo),如果是则通过new关键字创建对象,如果不是,则说明this指向的是window,
而window对象中并没有show函数,所以调用失败!
解决方法:
在当this指向window对象的时候,再重新返回新创建的对象。示例如下:
var Demo = function () { if(!(this instanceof Demo)){ return new Demo(); } }
示例二:安全的工厂方法
//安全模式创建的工厂类 var Factory = function (type, content) { if (this instanceof Factory) { alert('ok'); return new this[type](content); } else { alert('no'); return new Factory(type,content); } } //工厂原型中设置创建所有类型数据对象的基类 Factory.prototype = { Java: function (content) { alert('i am ' + content); }, JS: function (content) { alert('i am ' + content); }, PHP: function (content) { alert('i am ' + content); } }; var data = [ {type:"JS",content:"JJS"}, {type:"PHP",content:"PHPP"}, {type:"Java",content:"JAVA"} ]; for (var i = 0; i < data.length; i++) { Factory(data[i].type,data[i].content); }
posted on 2017-04-27 11:35 CodeArtist 阅读(177) 评论(0) 编辑 收藏 举报