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
系列文章:函数