javascript的类继承机制

蓝色_冰点 2014-06-16 06:27:40
自己写的,一直在用着,无不良反应,晒出来玩玩哈。。。
<html>
<head>
<title></title>
<script type="text/javascript">
(function(){
function callBase() {
var baseName = arguments[0];
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
if (!this.__callStack) {
this.__callStack = {};
}
if (!this.__callStack[baseName]) {
this.__callStack[baseName] = [];
}
var fun = null;
var cs = this.__callStack[baseName];
if (cs.length == 0) {
fun = this[baseName].base;
}
else {
fun = cs[cs.length - 1].base;
}
cs.push(fun);

var rv = null;
try {
rv = fun.apply(this, args);
}
catch (err) {
cs.length = 0;
throw err;
}
cs.pop();
return rv;
}
var _id = 0;
function clsID() {
_id++;
return "c" + _id;
}
var clsMap = {};
Function._class = clsID();
Function.prototype.extend = function (baseCls, proto) {
var F = function () { };
F.prototype = baseCls.prototype;
this.prototype = new F();
for (var member in proto) {
var oldFun = this.prototype[member];
var newFun = proto[member];
if (oldFun) {
newFun.base = oldFun;
}
this.prototype[member] = newFun;
}
this.prototype.callBase = callBase;
var clsKey = baseCls._class + "/" + clsID();
this._class = clsKey;
this.prototype.constructor = this;
clsMap[clsKey] = this;
};
Function.prototype._class = "cls_native";
})();
</script>
</head>
<body>
<script type="text/javascript">
/**
父类定义
*/
function ClassA(){
this.name="My name is ClassA";
}
ClassA.prototype.show=function(){ alert(this.name) };

function ClassB(){
//调用父类构造函数
ClassA.call(this);
this.name=this.name+"(extend)";
}
//继承自ClassA
//子类.extend(父类,{ ... /* 子类扩展的方法..*/ });
ClassB.extend(ClassA,
{
//覆盖父类的show函数
show:function(){
this.callBase("show"); //可以调用父类的方法
alert("再alert一下:"+this.name);
}
}
)

var a=new ClassA();
a.show();

var b=new ClassB();
b.show();

</script>
</body>
</html>
...全文
140 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
不是说好的吗 2014-06-17
  • 打赏
  • 举报
回复
天际的海浪 2014-06-16
  • 打赏
  • 举报
回复
和我用的差不多,有人和我抱怨过,你们js代码写的类怎么一个人的代码一个样,最没有标准的写法么?

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧