大连仟亿科技
客服中心
  • 电话
  • 电话咨询:0411-39943997
  • 手机
  • 手机咨询:15840979770
    手机咨询:13889672791
网络营销 >更多
您现在的位置:仟亿科技 > 新闻中心 > 常见问题

JS中实现分布类定义

作者:billionnet 发布于:2012/11/24 16:59:38 点击量:

 

在定义类时,如果这个类足够的大,为了方便管理,会把类定义在不同的文件,但是在javascript(JS)中没有这样的功能,为了简化工作做了一个可以实现分部类定义的功能.

    其实现原理主要是通过修改原型链和call.

    代码如下:

/*
 实现分部类定义
 
 定义时,如果prototype(及方法)名称以(__)开头的话,将视为临时方法,及只在初始化进行执行,后续不在需要,在执行完成后会删除此方法,
 目的是为了减小instance,因此在定义私有prototype(方法)时,请用(_)开头
 
 
 
 Example:
 function animal() {
     this.weight = 100;
     //必须继承于partial
     partial.call(this,animal);
 }
 animal.prototype = {
     displayWeight: function () {
         console.info(this.weight);
     }
 };
 
 par(animal, function () {
     function p() {
         this.name = "hello world";
     }
     p.prototype = {
         displayName: function () {
             console.info(this.name);
         }
     };
     return p;
 });
 
  var p = new animal();
 */
 
 function par(cls, fn) {
     if (!cls.parts) {
         cls.parts = [];
     }
 
     //append prototype
     fn = fn();
     var i;
     for (i in fn.prototype) {
         if (typeof (fn.prototype[i]) === "function") {
             if (cls.prototype[i] != null && console) {
                 console.warn("prototype(" + i + "):已经存在");
             }
             else {
                 cls.prototype[i] = fn.prototype[i];
             }
         }
     }
 
     //append property
     cls.parts.push(fn);
 }
 
 function partial(cls) {
     var i;
     for (i = 0; i < cls.parts.length; i++) {
         cls.parts[i].call(this);
     }
 
     //optimize
     var reg = /^__[0-9a-zA-Z]+$/;
     var j;
     for(j in cls.prototype) {
         if (reg.test(j)) {
             delete cls.prototype[j];
         }
     }
 }

 



分享到:


评论加载中...
内容:
评论者: 验证码:
  

Copyright@ 2011-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号   google网站地图   百度网站地图   网站地图

公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563

法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明