Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|Comet程序开发
您现在的位置: 天极网 > 开发频道 > 解开AJAX技术生命中的达芬奇密码
全文

解开AJAX技术生命中的达芬奇密码

2006-12-28 10:13 作者: 出处: CSDNBLOG 责任编辑:>方舟

  改良后的Solution:

  动态父类调用快速版本:

  一次性支持代码
//定义最顶级类
function Class() { }
Class.prototype.construct = function() {};
Class.extend = function(def) {
var classDef = function() {
if (arguments[0] !== Class) { this.construct.apply(this, arguments); }
};

var proto = new this(Class);
var superClass = this.prototype;

for (var n in def) {
var item = def[n];
if (item instanceof Function) item.$ = superClass;
proto[n] = item;
}

classDef.prototype = proto;

//赋给这个新的子类同样的静态extend方法
classDef.extend = this.extend;
return classDef;
};

  运行示例:

//Hey, 注意一下这个类的定义方式
//看上去比其它方式要清楚些
var BaseClass = Class.extend({
construct: function() { /* optional constructor method */ },

getName: function() {
return "BaseClass(" + this.getId() + ")";
},

getId: function() {
return 1;
}
});

var SubClass = BaseClass.extend({
getName: function() {
//调用BaseClass的getName()方法
return "SubClass(" + this.getId() + ") extends " +
arguments.callee.$.getName.call(this);
},

getId: function() {
return 2;
}
});

var TopClass = SubClass.extend({
getName: function() {
//调用SubClass的getName()方法
return "TopClass(" + this.getId() + ") extends " +
arguments.callee.$.getName.call(this);
},

getId: function() {
// this.getId()总是返回调用父类的getId()方法的返回值(2)
return arguments.callee.$.getId.call(this);
}
});

//输出结果:"TopClass(2) extends SubClass(2) extends BaseClass(2)"
//工作正常!而且没有任何中间function
alert(new TopClass().getName());

  这是最后的设计,它使用了JavaScript中一点鲜为人知的特性:callee。

  在任何方法执行过程中,你可以查看那些通过“arguments”数组传入的参数,这是众所周知的,但很少有人知道“arguments”数组包含一个名为“callee”的属性,它作为一个引用指向了当前正在被执行的function,而后通过“$”便可以方便的获得当前被执行function所在类的父类。这是非常重要的,因为它是获得此引用的唯一途径(通过“this”对象获得的function引用总是指向被子类重载的function,而后者并非全是正在被执行的function)。

  原文作者附言:
image


  Ok,这便是相对彻底的问题解决方案了。但是我想通过把它的细节写成文档让每个人阅读,以致我可以从中找出漏洞不断地完善代码。欢迎对我的文章进行评论和建议!
共5页。 9 1 2 3 4 5
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml