介紹函數四種調用模式前,咱們先來了解一下函數和方法的概念,其實函數和方法本質是同樣,就是稱呼不同而已。函數:若是一個函數與任何對象關係,就稱該函數爲函數。方法:若是一個函數做爲一個對象屬性存在,咱們就稱之爲方法。接下來就能夠開始今天的主體。
一、函數調用模式。
就是經過函數來調用,規範寫法爲:function fn(){} fn(); 函數中this的指向->window。案例以下:
var age = 38;
var obj = {
age: 18,
getAge: function() {
function foo() {
console.log(this.age); // 由於是函數調用模式,因此this指向window全局變量,因此輸出爲38
}
// 只看這個函數是怎麼調用,無論函數是在哪聲明的!
foo();
}
};
obj.getAge();
二、方法調用模式。
就是經過對象的屬性來調用,規範寫法爲:
var obj = {
say: function() {
console.log(this);
}
};
obj.say();
函數中this的指向->當前對象。案例以下:
var age = 38;
var obj = {
age: 18,
getAge: function() {
console.log(this.age);// 18
}
};
obj.getAge();//由於是方法調用模式,this指向當前的對象obj。
三、構造函數模式
若是是做爲構造函數來調用,那麼this就是指向:new建立的新對象!規範寫法爲:
function foo() {
this.name = "123";
}
var f0 = new foo();
沒有找到合適的案例,爲你們見諒!!!
四、函數上下文(借用方法模式)。
上下文模式中this的指向和前三種模式不同,它的this指向能夠改變,而前三種模式是固定。函數上下文在我理解就是函數做用域。基本語法:apply和call 後面都是跟兩個參數
apply和call第一個參數同樣:表示使用那個對象來調用函數;apply第二個參數是:是一個數組或僞數組,數組的值作爲函數的參數被傳入;call第二個參數是:是基本數據類型(number string boolean);案例以下:
//1:求一個數組中的最大值
方法一:常規寫法
var arr = [9, 1, 4, 101, 7, 22, 8];
var maxNum = arr[0],
i = 1, len = arr.length;
for(; i < len; i++) {
if(arr[i] > maxNum) {
maxNum = arr[i];
}
}
console.log(maxNum);
方法二:使用上下文調用模式(apply);
var arr = [9, 1, 4, 101, 7, 22, 8];
var maxNum=Math.max.apply(window,arr);//Math.max是window中的排序方法咱們能夠經過apply借用window中Math.max方法來對數組進行排序。
console.log(maxNum);