首页 > 代码库 > 类和原型之工厂模式!
类和原型之工厂模式!
1 function inherit(p){ 2 if(p == null) throw TypeError();//非空对象否则抛出异常 3 if(Object.creat){ 4 //通过Object.creat()创建继承了其属性和方法 5 return Object.creat(p);//如果存在Object.creat 直接使用这个对象 6 } 7 var t = typeof p;//否则进一步的检测 8 if(t !== "object" && t !== "function") throw TypeError() 9 function f(){}; 10 f.prototype = p;//p对象赋值给f的原型,这时f原型指向就是p的原型 11 return new f();//返回实例对象 12 } 13 /*工厂方法 14 *主要功能:创建范围对象 15 */ 16 function range(from,to){ 17 var r =inherit(range.methods); 18 //初始化 19 r.from = from; 20 r.to = to; 21 return r;//返回实例对象 22 } 23 //函数添加一个属性,存储一组行为的方法 24 range.methods ={ 25 includes : function (x){ 26 return this.from <= x && x <= this.to; 27 }, 28 foreach : function(f){ 29 for(var x = Math.ceil(this.from);x <= this.to; x++) f(x); 30 }, 31 toString : function(){return "("+this.from+"...."+this.to+")";} 32 }; 33 var r = range(1,3); 34 r.includes(2); 35 r.foreach(console.log); 36 console.log(r);
关于Object.creat();
创建一个新对象,第一个参数是这个对象的原型,第二个参数是可选的。
是个静态函数,而不是提供给某个对象调用的方法,只需要传入对象的原型。
例如1: var o1 = Object.create({x:1,y:2});//继承了属性x和y
如果传入是null 则没有继承任何对象,甚至不包括基础的方法,比如toString(),它也不能和 “+”运算符一起工作。
例如2:
var o2 = Object.create(null);//不继承任何属性和方法
如果想创建普通的空对象
可以通过: {} 和 new Object()创建对象 传入 Object.prototype
var o3 = Object.create(Object.prototype);//和{}、new Object()一样
类和原型之工厂模式!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。