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

请输入187

请输入187

2016-02-19 20:32

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的javascript OOP:实现继承、多态与封装懂设计的网友们快点来了解吧!

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

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

(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;
};
})();

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

(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.');
        }
    };
});
})();

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

(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.will 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. will 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();

展开更多 50%)
分享

猜你喜欢

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

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

利用javascript中的call实现继承

Web开发
利用javascript中的call实现继承

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Javascript学习笔记:封装(Encapsulation)

Web开发
Javascript学习笔记:封装(Encapsulation)

javascript学习:基础继承机制

Web开发
javascript学习:基础继承机制

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

国内外 JavaScript 经典封装

Web开发
国内外 JavaScript 经典封装

C语言中的面向对象(1)-类模拟和多态,继承

编程语言 网络编程
C语言中的面向对象(1)-类模拟和多态,继承

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MySQL数据库技术(32)

MySQL数据库技术(32)

Win10待机唤醒待机后wifi连接不上的解决方法

Win10待机唤醒待机后wifi连接不上的解决方法
下拉加载更多内容 ↓