2012总结之pcode.DefineClass

$pcode.DefineClass如其名就是定义类,它提供如下方法

$pcode.DefineClass(ClassB, ClassC)  //定义开始, 支持扩展已有的类
    .Extend(ClassD, ClassE) //扩展已有的类
    .Static({}) //定义静态属性和方法
    .Event({})  //定义事件
    .DefineGroup("privateClassA", {})   //定义分组
    .Define({}) //定义类的属性和方法
    .Init(function () { })  //类的初始方法
    //.ReturnDefine();   //返回类的定义
    .Class("ClassA");    //直接生成一个类

 

  一,定义类,开始:

$pcode.DefineClass()
    .Define({
        helloWrod: function () {
            console.log("helloWrod");
        }
    })
    .Class("ClassA");

var objA = new ClassA();
objA.helloWrod();

 

  二,类的初始化:

$pcode.DefineClass()
    .Define({
        name: "",
        helloWrod: function () {
            console.log("helloWrod:" + this.name);
        }
    })
    .Init(function () {
        this.name = "ClassA";
        this.helloWrod();
    })
    .Class("ClassA");

new ClassA();


三,类的静态

$pcode.DefineClass()
    .Static({
        helloWrod: function () {
            console.log("helloWrod");
        }
    })
    .Class("ClassA");

ClassA.helloWrod();

 

四,类的扩展, javascript里的不要有继承的思想, 只能有扩展的思想
原因是javascript里没有私有、保护等属性, 但private, public等为保留内容(最好不要用它)

$pcode.DefineClass()
    .Define({
        name: null,
        helloWrod: function () {
            console.log("helloWrod: " + this.name);
        }
    })
    .Init(function () {
        this.name = "ClassA";
    })
    .Class("ClassA");

    $pcode.DefineClass(ClassA)
    .Init(function () {
        this.name = "ClassB";
    })
    .Class("ClassB");

    var objA = new ClassA();
    var objB = new ClassB();
    objA.helloWrod();
    objB.helloWrod();
    //原型一些支持
    console.log([objB.isConstructorOf(ClassA), objB.isConstructorOf(ClassB), objB.isConstructorOf(Object)]);
    //结果:[true, true, true]

 

五,调用扩展的方法baseApply、baseCall

$pcode.DefineClass()
    .Define({
        name: null,
        helloWrod: function () {
            console.log("helloWrod: " + this.name);
        }
    })
    .Init(function () {
        this.name = "ClassA";
    })
    .Class("ClassA");

    $pcode.DefineClass(ClassA)
    .Init(function () {
        this.name = "ClassB";

        //调用扩展的方法有以下两种
        //this.baseApply("init", 0, arguments);
        this.baseCall("init", 0, "testCall");
        //0为调用第零个扩展方法, 原因支持多个扩展
        //由于调用了ClassA的init方法
        //this.name == "ClassA"
    })
    .Class("ClassB");

    var objA = new ClassA();
    var objB = new ClassB();
    objA.helloWrod();
    objB.helloWrod();

 

六,定义分组, 由于javascript没有私有等属性, 我们就要定义一些规则代替, 如有一些浏览器就会在变量前后添加"__"(如:__proto__) ,这里
我规则就是分组:

$pcode.DefineClass()
    //我可定义ClassA的私有, 由于我为自己规定不是公用的, 所以以后可以随便修改和维护
    .DefineGroup("privateClassA", {
        name: null
    })
    .Define({
        helloWrod: function () {
            console.log("helloWrod: " + this.privateClassA.name);
        }
    })
    .Init(function () {
        this.privateClassA.name = "ClassA";
    })
    .Class("ClassA");

new ClassA().helloWrod();

 

七,分组对实体的调用, 由于分组为一个属性对象, 所以分组里this只能分组自己了, 看如下:

$pcode.DefineClass()
    .DefineGroup("privateClassA", {
        name: null,
        helloWrod: function () {
            //调用实体的helloWrod
            this.$this().helloWrod();
        }
    })
    .Define({
        helloWrod: function () {
            console.log("helloWrod: " + this.privateClassA.name);
        }
    })
    .Init(function () {
        this.privateClassA.name = "ClassA";
        this.privateClassA.helloWrod();
    })
    .Class("ClassA");

    new ClassA();

 

八,实现事件

$pcode.DefineClass()
    .Event({
        //定义onSayHello事件, 当然你可以直接用on方法定义, 但如果为了可提示就要显式定义
        onSayHello: function (callback) {
            /// <summary>
            /// onSayHello(sender)
            /// </summary>
            /// <param name="callback"></param>
            /// <returns type=""></returns>
            this.on("onSayHello", callback);
            return this;
        }
    })
    .Define({
        helloWrod: function () {
            console.log("helloWrod");
            //确发事件, 并传入实体sender
            this.Event.trigger("onSayHello", this);
        }
    })
    .Class("ClassA");

    var objA = new ClassA();
    //添加一个事件
    objA.Event.onSayHello(function (sender) {
        console.log("On Event helloWrod");
    });
    objA.helloWrod();

 

九,类的释放机制实现,dispose, onDispose

$pcode.DefineClass()
    .Init(function () {
        var $obj = this;

        //自带onDispose事件, 释放时调用
        this.Event.onDispose(function () {
            $obj = null;//断开$obj
            console.log("onDispose");
        });

    })
    .Class("ClassA");

    var objA = new ClassA();
    objA.dispose();//dispose不会自动调用, 要手动调用

 

十,自动释放?

$pcode.DefineClass()
    .Init(function () {
        var $obj = this;

        //自带onDispose事件, 释放时调用
        this.Event.onDispose(function () {
            $obj = null; //断开$obj
            console.log("onDispose");
        });


        //连接到Dom, 当Dom给删除这里会自动调用dispose方法
        //this.linkToDom(window); //返回一个linkdom对象支持unlink和disconnect
        this.linkToDom("div:first");
    })
    .Class("ClassA");

    var objA = new ClassA();
    $("div:first").remove();//删除dom

 

下一节我会演示$pcode.Class实现类文件之间的定义引用

$pcode.Class("Main", ["ClassTest.ClassA"], function () {
    console.log("Main");

    return $pcode.DefineClass()
        .Init(function () {
            
        })
        .ReturnDefine();
});

 

开发时智能提示 :

 

开源位置:https://github.com/winpzs/pcode

转载于:https://www.cnblogs.com/winpzs/archive/2013/02/02/2890351.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值