zoukankan      html  css  js  c++  java
  • 用Object.create来创建对象,及其兼容性写法

    function inherit(p){
      if(p==null){
        throw TypeError();
      }
      if(Object.create){
        return Object.create(p);
      }
      var t=typeof p;
      if(t!=='object'&&t!=='function'){
        throw TypeError();
      }
      function f(){};
      f.prototype=p;
      return new f();
    }
    
    function range(from,to){
      var r=inherit(range.methods);
      r.from=from;
      r.to=to;
      return r;
    }
    
    range.methods={
      includes:function(x){
        return this.from<=x&&x<=this.to;
      },
      foreach:function(f){
        for(var x=Math.ceil(this.from);x<=this.to;x++) f(x);
      },
      toString:function(){
        return "("+this.from+'...'+this.to+')';
      }
    };
    
    var r=range(1,3);
    
    r.includes(2);
    r.foreach(console.log);
    r.toString();

    Object.create 函数

    创建一个具有指定原型且可选择性地包含指定属性的对象。

    Object.create(prototype, descriptors)

    prototype

    必需。 要用作原型的对象。 可以为 null。

    descriptors

    可选。 包含一个或多个属性描述符的 JavaScript 对象。

    “数据属性”是可获取且可设置值的属性。 数据属性描述符包含 value 特性,以及 writable、enumerable 和 configurable 特性。 如果未指定最后三个特性,则它们默认为 false。 只要检索或设置该值,“访问器属性”就会调用用户提供的函数。 访问器属性描述符包含 set 特性和/或 get 特性。

    在以下文档模式中受支持:Internet Explorer 9 标准模式、Internet Explorer 10 标准模式和 Internet Explorer 11 标准模式。

    inherit方法中,如果运行环境不支持Object.create那么先创建一个空的构造方法,然后把它的原型赋值为指定对象,然后用new实例就得到了新的对象

    rang是一个示例
  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/lingtong/p/4081931.html
Copyright © 2011-2022 走看看