类和原型之工厂模式!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和原型之工厂模式!相关的知识,希望对你有一定的参考价值。
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()一样
以上是关于类和原型之工厂模式!的主要内容,如果未能解决你的问题,请参考以下文章