js中的this关键字指的是什么?
this:
当前方法执行的主体(谁执行的这个方法,那么this就是谁,所以this和当前方法在哪创建的或者在哪执行都没有必然的关系)
判别js中this
关键字的几个技巧
第一:给当前元素的某个事件绑定方法,当事件触发方法执行的时候,方法中的this
是当前操作元素对象
oBox.onclick = fucntion () {
// => this 指的是oBox
}
第二:普通函数执行,函数中的 this
取决于执行的主体,谁执行的, this
就是谁(执行主体:非严格模式下,方法执行,看方法名前面是否有 点
,有的话 点
前面是谁就是谁,没有this
就是 window
,严格模式下 this
是 undefined
)
function fn (){
console.log(1);
}
var obj = {
fn:fn;
};
//执行的是相同的方法
obj.fn(); //函数的this是obj
fn(); //函数的this是window
第三:自执行函数中的 this
是 window
~function(){
//自执行函数中的this是window
}();
第四:构造函数执行的时候,方法体中出现的 this
就是当前函数这个类的实例。
function Fn(name,age){
var n = 10;
this.name = name; //=> this是当前类的实例
this.age = age + n; //=> this是当前类的实例
}
var f = new Fn();
第五:箭头函数中没有this
,this
是上下文中的 this
let obj = {
fn:function (){
//=> this:obj
setTimeout(()=>{
//=> this:obj;
},1000);
}
}
obj.fn();
第六:在小括号表达是中,会影响 this
执向
let obj = {
fn:function (){
}
}
obj.fn(); //=> this:obj
(12,obj.fn)(); //=> this:window
第七:使用 call / apply / bind
可以改变 this
执向
代码实例
let obj = {
fn:function (){
}
}
fn.call(obj); //=> this:obj
fn.call(12); //=> 12
fn.call(); //=>this:window 非严格模式下 call / apply / bind 第一个参数不写或者写null和undefined,this都是window,严格模式下写谁就是谁,不写就是undefined
第八:回调函数中一般 this
都是 window
,除非宿主函数执行回调函数的时候把 this
特殊指向了(箭头函数除外:箭头函数中的 this
是它上下文)
代码实例
let fn = (callback)=>{
callback && callback();
//type of callback === 'function' ? callback():null;
let res = callback(10,20);
console.log(res);
}
fn((n,m)=>{
//=> this:window
console.log(n,m);
return n + m;
});