首页 > 代码库 > 类和原型之工厂模式!

类和原型之工厂模式!

 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()一样

 

类和原型之工厂模式!