网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网页制作 > Javascript
网页制作:Dreamweaver教程,FrontPages教程,Javascript教程,HTML教程,CSS教程,心得技巧,DHTML教程,网页特效,Discuz!论坛
本月文章推荐
.JavaScript常用检测脚本.
.JavaScript类的静态成员及其修改.
.单行Javascript实现Memoization.
.javascript与内存.
.利用JAVASCRIPT让IFRAME框架的高.
.用JavaScript实现浏览器地震效果.
.Javascript页面宽度高度.
.javascript中的数组应用的一点发.
.javascript+css好多网站用的选星.
.Js之软键盘实现(源码) .
.javascript操作select相关方法:.
.Javascript实例:Select的OnChan.
.javascript中如何实现浏览器上的.
.JavaScript写作技巧,函数A中调用.
.JavaScript函数库的未来.
.一个很通用的javascript的下拉菜.
.一行JS代码给实现Blog页面下雪效.
.JavaScript仿Windows关机效果.
.Javascript实例教程(8) 检验表单.
.按比例微缩图片的一段小小的JS代.

javascript OOP:实现继承、多态与封装

发表日期:2008-9-1


代码是随手写的,只提供思路。

这个原理很简单,看代码就懂,不多说了。


 


(function (){
var h = 0;
handle = function (){return h++};
var f = function (){};
extend = function (a, b){
    f.prototype = a;
    var ret = new f;
    if (typeof b == 'function') {
        b.call(ret);
    } else if (typeof b == 'object') {
        for (var key in b) {
            ret[key] = b[key];
        }
    }
    return ret;
};
})();

(function (){
ClassA = function (){
    this.hello = 'world';
};
ClassA.virtualmethod = handle();
ClassA.prototype = extend({}, function (){
    this.virtualmethod = function (){
        var impl = this[ClassA.virtualmethod];
        if (impl) {
            impl.apply(this, arguments);
        } else {
            alert('ClassA.virtualmethod not yet impl.');
        }
    };
});
})();

(function (){ // ClassB extend ClassA
ClassB = function (){
    ClassA.apply(this, arguments);
};

// 继承性
ClassB.prototype = extend(ClassA.prototype, function (){
    this[ClassA.virtualmethod] = function (){
        alert('this is ClassA.virtualmethod, impl in ClassB.\nwill show this.hello.');
        alert('this.hello = ' + this.hello);
    }
   
    // 封装性
    this.test = this.virtualmethod;
    this.virtualmethod = undefined;
});
})();

(function (){ // ClassC extend ClassB
ClassC = function (){
    ClassB.apply(this, arguments);
};

ClassC.prototype = extend(ClassB.prototype, function (){
    // 多态性
    var impl = this[ClassA.virtualmethod];
    this[ClassA.virtualmethod] = function (){
        alert('this is ClassA.virtualmethod, impl in ClassC. \nwill run ClassB\'s impl.');
        impl.apply(this, arguments);
    };
});
})();

// test case
var a = new ClassA;
a.virtualmethod(); // not yet impl

var b = new ClassB;
b.test();
alert('b.virtualmethod is: '+b.virtualmethod);

var c = new ClassC;
c.test();

上一篇:贴一段用javascript打开和保存本地文件的源码 人气:1573
下一篇:关于搜索引擎页面分析中的 javascript 处理的2个思路 人气:793
浏览全部javascript的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐