當然了,所謂的給函數擴展功能或方法指的是不修改原函數的前提下.
很多人都知道Mootools面向對象的機制不錯,不過多數人都把面向對象理解錯了,認為面向對象就是類,其實不然,面向對象的范圍是非常廣的.
那么我的這篇文章實際上就是面向對象的一種應用,只不過這個對象是一個function,而并非class.
//給指定Function擴展新的方法或屬性
var Fun=function(){
alert('a')
};
Fun.extend({
aa:function(){
alert('b');
}
});
Fun();
Fun.aa();
在上邊這段代碼中函數Fun唯一的用途就是用來輸出a這個字符,此時我們把這個函數理解成是一個對象,那如果我們要給這個函數增加一個新的方法,讓他除了能輸出a之外還能輸出b
因此我就是用了extend對Fun這個對象進行了一次方法擴展,注意擴展之后的方法調用的時候會略有不同.
下邊的例子同時演示了如何擴展屬性和方法.
var arr=[];
var Fun=function(){
arr=[1,2];
};
Fun.extend({
len:function(){//給Fun擴展屬性
return arr.length;
},
add:function(val){//給Fun擴展方法
arr.push(val);
}
});
var a=Fun.len(arr);
alert(a+'|'+arr);//此時輸出:0|
Fun();//調用此函數給arr賦值
var a=Fun.len();
alert(a+'|'+arr);//此時輸出:2|1,2
Fun.add('新的');
var a=Fun.len();
alert(a+'|'+arr);//此時輸出:3|1,2,新的
Fun.add(['a','b','c']);
var a=Fun.len();
alert(a+'|'+arr);//此時輸出:4|1,2,新的,a,b,c
len是我擴展的屬性,用來取得arr的length數,而add則是一個方法,用來給arr這個array添加新的值
implement是用來給所有的函數擴展方法的,其實很好理解,我們已經知道在Mootools中有pass,bind,delay等等的方法,這些方法都是Mootools為我們預定義的
但是如果你在實際開發過程中發現他為我們預定義的方法不能滿足我們的需求,此時怎么辦呢,很簡單,只要自己擴展就好了,看下邊:
//擴展新的Function
var a=function(){};
var b=function(){};
Function.implement({
alert:function(msg){//直接alert輸出內容
alert(msg);
},
output:function(msg){//firebug的控制臺會輸出內容,IE會報錯
console.log(msg);
}
});
a.alert('1');
a.output('2');
b.output('3');
看過這篇文章之后您是否對Mootools的面向對象有了一個新的認識呢?
(文章來源:http://see7di.cnblogs.com)