WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院网页设计JavaScript javascript OOP:实现继承、多态与封装 阅读

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

 2008-09-01 19:59:07 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劖顐煎☉妯锋瀻闁归偊鍓涘▔姘舵⒑閸涘⿴娈旀繛灞傚妼閳绘捇骞嬪┑鎰濡炪倖姊婚崢褏鎲撮敓锟�
核心提示:代码是随手写的,只提供思路,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;
};
})();

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

Tags:javascript OOP 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接