天天看点

JavaScript~this指向总概

this存在任何地方,不同环境代表不同的含义,取决于调用时的环境

在全局作用域中this指向全局对象window

在全局作用域中this指向全局对象window

console.log(this); // window
           

在普通函数中this指向全局对象window

function fn() {
     console.log(this); //指向window
}
fn();
           

在对象的方法( 函数 )中this指向当前对象

var obj = {
    abs: function () {
        console.log(this); //输出{abs: ƒ}
  }
};
           

事件处理函数中的this指向触发事件的对象-->触发源

lis[0].onclick = function () {
     console.log(this); //指向第一个li
}
           

构造函数中的this指向构造函数的实例化对象

function CreateObj(age){
            console.log(this);//this指向该构造函数的实例化对象
            this.age = age;
            this.work = function () {
                console.log('工作去吧');
            };
        }

        // 实例化:
        var obj = new CreateObj(38);
        console.log(obj);
           

匿名函数自执行函数this指向全局对象window

(function (a, b) {
     console.log(this);//指向window
     console.log(a, b);
})(10, 20);
           

结合上面例子了解this指向问题,并不是一成不变的,可以通过call和apply方法更改this指向

函数.call(this的新指向, ...data);  参数一个个 用,分隔直接写

var obj = {
        name: '张三',
        sayName: function () {
            console.log(this);//指obj这一对象
            console.log(this.name);//张三
        }
    };
    var obj1 = {
        name: '李四'
    };
    obj.sayName.call(obj1); // 李四
           

函数.apply(this的新指向, [...data]); 第二个参数是一个数组

//  apply方法用于求数组最大和最小项
   var arr = [32, 43, 546, 56, 32, 534, 234, 65];
   console.log(Math.max.apply(this, arr));//546
   console.log(Math.min.apply(this, arr));//32
           

继续阅读