js中的this关键字指的是什么?

js中的this关键字指的是什么?

this: 当前方法执行的主体(谁执行的这个方法,那么this就是谁,所以this和当前方法在哪创建的或者在哪执行都没有必然的关系)

判别js中this 关键字的几个技巧

第一:给当前元素的某个事件绑定方法,当事件触发方法执行的时候,方法中的this 是当前操作元素对象

oBox.onclick = fucntion () {
    // => this 指的是oBox
}

第二:普通函数执行,函数中的 this 取决于执行的主体,谁执行的, this 就是谁(执行主体:非严格模式下,方法执行,看方法名前面是否有 ,有的话 前面是谁就是谁,没有this 就是 window,严格模式下 thisundefined

function fn (){
    console.log(1);
}
var obj = {
    fn:fn;
};

//执行的是相同的方法
obj.fn();  //函数的this是obj
fn();      //函数的this是window

第三:自执行函数中的 thiswindow

~function(){
    //自执行函数中的this是window
}();

第四:构造函数执行的时候,方法体中出现的 this 就是当前函数这个类的实例。

function Fn(name,age){
    var n = 10;
    this.name = name;    //=> this是当前类的实例
    this.age = age + n;   //=> this是当前类的实例
}

var f = new Fn(); 

第五:箭头函数中没有thisthis 是上下文中的 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;
});

你可能感兴趣的:(js中的this关键字指的是什么?)