六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

在javascript中实现分部类定义

[复制链接]

升级  56%

8

主题

8

主题

8

主题

童生

Rank: 1

积分
28
 楼主| 发表于 2012-12-22 21:30:52 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">    在定义类时,如果这个类足够的大,为了方便管理,会把类定义在不同的文件,但是在javascript中没有这样的功能,为了简化工作做了一个可以实现分部类定义的功能.
    其实现原理主要是通过修改原型链和call.
    代码如下:
   
<div class="cnblogs_code"> 1 /* 2 实现分部类定义 3 4 定义时,如果prototype(及方法)名称以(__)开头的话,将视为临时方法,及只在初始化进行执行,后续不在需要,在执行完成后会删除此方法, 5 目的是为了减小instance,因此在定义私有prototype(方法)时,请用(_)开头 6 7 8 9 Example:10 function animal() {11     this.weight = 100;12     //必须继承于partial13     partial.call(this,animal);14 }15 animal.prototype = {16     displayWeight: function () {17         console.info(this.weight);18     }19 };20 21 par(animal, function () {22     function p() {23         this.name = "hello world";24     }25     p.prototype = {26         displayName: function () {27             console.info(this.name);28         }29     };30     return p;31 });32 33 var p = new animal();34 */35 36 function par(cls, fn) {37     if (!cls.parts) {38         cls.parts = [];39     }40 41     //append prototype42     fn = fn();43     var i;44     for (i in fn.prototype) {45         if (typeof (fn.prototype) === "function") {46             if (cls.prototype != null && console) {47                 console.warn("prototype(" + i + "):已经存在");48             }49             else {50                 cls.prototype = fn.prototype;51             }52         }53     }54 55     //append property56     cls.parts.push(fn);57 }58 59 function partial(cls) {60     var i;61     for (i = 0; i < cls.parts.length; i++) {62         cls.parts.call(this);63     }64 65     //optimize66     var reg = /^__[0-9a-zA-Z]+$/;67     var j;68     for(j in cls.prototype) {69         if (reg.test(j)) {70             delete cls.prototype[j];71         }72     }73 }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表