当前位置:编程学习 > JAVA >>

JavaScript继承的一些工具函数

在阅读精通JavaScript(图灵计算机科学丛书)里面有讲解javascript继承的一些东东。

其一是讲解DouglasCrockford的js

代码如下:


[javascript]
//简单的辅助函数,让你可以将新函数绑定到对象prototype上  
      Function.prototype.method = function (name, func) { 
          this.prototype[name] = func; 
          return this; 
      } 
      //一个相当复杂的函数,允许你方便地从其他对象继承函数,  
      //同时仍然可以调用属于父对象的那些方法  
      Function.method('inherits', function (parent) { 
          var d = {}; //记录我们目前所在父层次的级数  
          var p = (this.prototype = new parent()); //继承父对象的方法  
          //创建一个新的名位uber的特权函数  
          //调用它时会执行所有在继承时被重写的函数  
          this.method("uber", function uber(name) { 
              if (!(name in d)) { 
                  d[name] = 0; //继承级数默认为0  
              } 
              var f, /*要执行的函数*/r, /*函数返回值*/t = d[name], v = parent.prototype; /*父对象的prototype*/ 
              if (t) { 
                  //如果我们已经在某个uber函数内 上溯到必要的级数已找到原始的prototype  
                  while (t) { 
                      v = v.constructor.prototype; 
                      t -= 1; 
                  } 
                  f = v[name]; //从prototype中获得函数  
              } 
              else { 
                  //uber第一次调用 从prototype获得要执行的函数  
                  f = p[name]; 
                  if (f == this[name]) { 
                      //如果函数属于当前prototype 则改为调用父对象的prototype  
                      f = v[name]; 
                  } 
              } 
              d[name] += 1; //记录我们在继承堆栈中所在位置  
              //使用除第一个以外所有的arguments 调用函数 第一个参数是执行的匿名函数名   
              r = f.apply(this, Array.prototype.slice.apply(arguments, [1])); 
              d[name] -= 1; //恢复继承堆栈  
              return r; 
          }); 
          return this; 
      }); 
      //只继承父对象特定的函数。而非使用new parent()的继承的所有函数  
      Function.method("swiss", function (parent) { 
          for (var i = 1; i < arguments.length; i++) { 
              var name = arguments[i]; 
              this.prototype[name] = parent[name]; 
          } 
          return this; 
      }); 
      /* Function.prototype.method 它提供了一个简单的方法,把函数于构造函数原型关联起来。
      之所以有效,是因为所有的构造函数本身都是函数,所以能获得method这个新方法
      Function.prototype.inherits这一函数可以用于提供简单的对象继承,它的代码主要围绕任意对象方法中调用
      this.uber(methodname)为中心,并在让这个uber方法执行它要覆盖的父对象的方法。
      Function.prototype.swiss这是.method函数的增强版,可以用于单一父对象获取多个函数。如果有多个父对象上
      就能获得可用的多对象继承
      */ 
  //简单的辅助函数,让你可以将新函数绑定到对象prototype上
        Function.prototype.method = function (name, func) {
            this.prototype[name] = func;
            return this;
        }  www.zzzyk.com
        //一个相当复杂的函数,允许你方便地从其他对象继承函数,
        //同时仍然可以调用属于父对象的那些方法
        Function.method('inherits', function (parent) {
            var d = {}; //记录我们目前所在父层次的级数
            var p = (this.prototype = new parent()); //继承父对象的方法
            //创建一个新的名位uber的特权函数
            //调用它时会执行所有在继承时被重写的函数
            this.method("uber", function uber(name) {
                if (!(name in d)) {补充:web前端 , JavaScript ,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,