this
的值)是全局對象,嚴格模式this
爲undefined
function myFunction() {
return this;
}
myFunction(); // 返回window對象
複製代碼
this
指向當前對象var calculator = {
value1: 1,
value2: 1,
add: function() {
// this指代當前對象
this.result = this.value1 + this.value2;
}
};
calculator.add() // 調用add方法結算結果
calculator.result // =>2
// 方括號(屬性訪問表達式)進行屬性訪問操做
calculator["add"]()
複製代碼
this
是全局對象,嚴格模式下爲undefined
var o = {
m: function() {
var self = this; // 將this的值進行保存
console.log(this === o); // "true"
f(); // 調用嵌套函數f()
function f() {
console.log(this === o); // "false": this的值爲全局對象或`undefined`
console.log(self === o); // "true": self指向外部函數this的值
}
}
}
複製代碼
new
關鍵字,它就構成構造函數調用。var o = {
m: function() {
return 1;
}
}
console.log(new o.m() === 1) // "false"
複製代碼
在上面的代碼中,儘管構造函數看起來像一個方法調用,但它依然會使用new
出來的新對象做爲調用上下文。也就是說,在表達式new o.m()
中,調用上下文並非o
。數組
call()
方法和apply()
方法
call()
和 apply()
是預約義的函數方法。 兩個方法可用於調用函數,兩個方法的第一個參數是要調用函數的母對象,它是調用上下文。bash
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // 返回 20
複製代碼
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // 返回 20
複製代碼
tip:
閉包
call()
和 apply()
區別在於第二個參數: apply傳入的是一個參數數組,也就是將多個參數組合成爲一個數組傳入,而call則做爲call的參數傳入(從第二個參數開始)結尾
app
系列文章:函數