高階函式,單例模式,AOP
(1)將函式作為引數的函式的情況,值得一提是前面學習,學到的陣列的重排序方法sort(),由於它會呼叫每個陣列項的toString轉型方法,然後得到字串,確定升序排列。即使陣列的每一項都是數值,比較的也是字串。因此,sort()方法可以接收一個函式做引數,以便我們決定我們指定哪個位置在哪個位置的前面。
function compare(v1, v2) {if (v1 < v2) {return -1;} else if (v1 > v2) {return 1;} else {return 0;}}//傳入的函式var arr = [];for (var i = 0; i < 10; i++) {arr.push(parseInt(Math.random() * 100));//建立一個陣列用於排序}arr.sort(compare);//將函式做引數傳入一個函式console.log(arr);
(2)將函式作為另一個函式的返回值(經典例子:資料型別的判斷)
function istype(array){
var Type = {};
for(var i = 0 , type ; type = array[i++];){
(function(ty){
Type["is" + ty] = function(obj){
return Object.prototype.toString.call(obj);
}
})(type);
}
return Type;
}
var Type = istype(["Number" , "String" , "Object" , "Function" , "boolean"]);//引數可以多加一些
var o = true;//測試資料
var result = Type.isString(o);
console.log("o的資料型別:" + result);
2.單例模式:產生一個類的唯一例項(js值沒有類的概念,但有類似機制建構函式)
function Person(){}
function getsigle(fn){
var obj = {};
return function(){
return obj || (obj = fn.apply(this,arguments));
};
}
var f = getsigle(function(){new Person()});
var p1 = f();
var p2 = f();
console.log(p1 === p2);//true
3.AOP:面向切面程式設計(Aspect Oriented Programing)(重要的兩個概念before,after)
Function.prototype.before = function(bFn){
var that = this;
return function(){
bFn.apply(this,arguments);//前置函式
return that.apply(this , arguments);//業務函式
}
}
Function.prototype.after = function(aFn){
var that = this;
return function(){
var ret;
ret = that.apply(this,arguments);//業務函式
aFn.apply(this, arguments);//後置函式
return ret;
}
}
var coreFunction = function(){console.log("2");};
coreFunction = coreFunction.before(function(){console.log("1");}).after(function(){console.log("3");});
coreFunction();//1 2 3
相關文章
- 高階單例模式單例模式
- Python 函式進階-高階函式Python函式
- 高階函式函式
- 從高階函式--->高階元件函式元件
- Kotlin 函式6 - 高階函式Kotlin函式
- 對高階函式的簡單認識函式
- 設計模式基礎 之 4 高階函式設計模式函式
- Kotlin高階函式Kotlin函式
- oracle 高階函式Oracle函式
- python高階函式Python函式
- 函式高階玩法函式
- Javascript 高階函式JavaScript函式
- Kotlin——高階篇(二):高階函式詳解與標準的高階函式使用Kotlin函式
- Spring AOP AspectJ 切面表示式高階用法Spring
- javaScript高階級函式JavaScript函式
- python- 函式高階Python函式
- Javscript 高階函式(上)函式
- shell高階-----建立函式函式
- 高階函式的使用函式
- JS高階函式-函式柯里化JS函式
- 高階函式簡述 js函式JS
- Kotlin中的高階函式Kotlin函式
- Haskell學習-高階函式Haskell函式
- openGauss 高階分析函式支援函式
- 高階函式 - Higher Order Function函式Function
- python高階內建函式Python函式
- Kotlin教程(八)高階函式Kotlin函式
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- JavaScript 高階函式快速入門JavaScript函式
- Python中函式的高階使用Python函式
- 理解 JavaScript 中的高階函式JavaScript函式
- Array高階函式reduce&filter函式Filter
- javascript高階函式的介紹JavaScript函式
- 『無為則無心』Python函式 — 33、高階函式Python函式
- JAVA物件導向高階:static的應用知識--單例模式 單例設計模式應用場景及好處 單例設計模式的實現方式Java物件單例設計模式
- Java進階篇設計模式之一 —– 單例模式Java設計模式單例
- Java進階篇設計模式之一 ----- 單例模式Java設計模式單例
- 探索MySQL高階語句(數學函式、聚合函式、字串函式、日期時間函式)MySql函式字串