国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript面向?qū)ο髷U(kuò)展庫代碼分享

2024-05-06 14:22:14
字體:
供稿:網(wǎng)友
lang.js庫提供了包和類的定義、類的繼承與混合(mixin)、函數(shù)重載等功能,基本可滿足大多數(shù)面向?qū)ο笤O(shè)計(jì)的需求。同時(shí)支持基于鏈?zhǔn)降亩x方式,讓庫在使用時(shí)更加規(guī)范和便捷。下面首先通過簡(jiǎn)單的例子演示了lang.js的基本功能,之后給出了lang.js的源碼及注釋。
一.功能介紹
“l(fā)ang”作為框架的全局定義,其中包括了四個(gè)方法:
lang.Package(string name) //用于定義包(默認(rèn)會(huì)暴露到全局)
lang.Class(string name[, object config], object classBody) //用于定義類
lang.Object(string name | object body) //用于定義支持重載函數(shù)的普通對(duì)象
lang.Function(string name | object body) //用于定義重載函數(shù)
代碼如下:
var lang = (function(){
/***********************************
Javascript面向?qū)ο髷U(kuò)展庫(lang.js v1.0)
By: X!ao_f
QQ: 120000512
Mail: xiao_f.mail#163.com
************************************/
var customToString = function(){
return '[' + this.Type.type + ' ' + this.Type.name + ']';
}
//支持重載的方法定義
var createMethod = (function(){
//創(chuàng)建一個(gè)代理函數(shù)
var createMethodProxy = function(context, name){
//當(dāng)調(diào)用重載的函數(shù)時(shí),首先會(huì)執(zhí)行該函數(shù)分析傳入的參數(shù),進(jìn)行匹配和轉(zhuǎn)發(fā)
var method = function(){
//在第一次調(diào)用時(shí)初始化,將映射信息緩存
if(!method.__initialized__){
initializeMethod(method);
}
//將參數(shù)類型拼接成函數(shù)簽名
var signature;
if(arguments.length){
var list = [];
for(var i=0; i<arguments.length; i++){
var typename;
var argument = arguments[i];
if(argument === undefined || argument === null){
typename = 'object';
}else if(argument instanceof Array){
typename = 'array';
}else if(argument instanceof Date){
typename = 'date';
}else{
typename = typeof argument;
if(typename == 'object'){
if('Class' in argument){
typename = argument.Class.Type.name;
}else if('nodeType' in argument){
typename = 'element';
}
}
}
list.push(typename);
}
signature = list.join(',');
}else{
signature = '';
}
//如果常規(guī)緩存中存在匹配的簽名,直接調(diào)用
if(method.__overloads__[signature]){
return method.__overloads__[signature].apply(this, arguments);
}else{
//緩存中不存在時(shí),嘗試?yán)谜齽t進(jìn)行模糊匹配
//首先判斷模糊匹配緩存中是否存在記錄,如存在直接調(diào)用
if(method.__overloadsCache__[signature]){
return method.__overloadsCache__[signature].apply(this, arguments);
}
//循環(huán)匹配
for(var i=0; i<method.__overloadsRegExp__.length; i++){
//如果匹配成功,將映射關(guān)系存入模糊匹配緩存,同時(shí)調(diào)用并返回
if(method.__overloadsRegExp__[i].regexp.test(signature)){
method.__overloadsCache__[signature] = method.__overloadsRegExp__[i].fn;
return method.__overloadsRegExp__[i].fn.apply(this, arguments);
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 湖口县| 东乡县| 昌宁县| 湘乡市| 深泽县| 襄城县| 阿拉善右旗| 保定市| 宁化县| 万载县| 和龙市| 麦盖提县| 且末县| 镇康县| 平陆县| 错那县| 钦州市| 孝昌县| 和林格尔县| 广饶县| 高陵县| 普洱| 南宁市| 寿阳县| 定州市| 和静县| 马关县| 资源县| 龙岩市| 霍邱县| 象山县| 青岛市| 德惠市| 达日县| 化州市| 迁安市| 阿拉尔市| 麟游县| 新安县| 竹山县| 恩平市|