类和原型之工厂模式!

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

 

转载于:https://www.cnblogs.com/sunflower-smile/p/6710203.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值