js中的this关键字

面向对象语言中this表示当前对象的一个引用

1.在方法中,this表示该方法所属的对象
2.在函数中,函数的所属者默认绑定到this下;在严格模式下,this是未定义的(undefined)
3.在事件中,this表示接收事件的元素
4.如果单独使用,this表示全局对象
5.对象方法中绑定,this是定义的对象,是函数的所有者
5.call()和apply()方法可以将this引用到任何对象,改变this的指向

单独使用this

在浏览器中,window就是该全局对象

this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子4中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是

var o = {
    a:10,
    b:{
        // a:12,
        fn:function(){
            console.log(this.a); //undefined
        }
    }
}
o.b.fn();
var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;
j();

new操作符会改变函数this的指向问题

new关键字会创建一个空的对象,然后会自动经过一些操作(例如调用一个函数apply方法),将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

function fn(){
    this.num = 1;
}
var a = new fn();
console.log(a.num); //1

 下方例子函数体内部使用了this关键字。很多教科书会告诉你,this指的是函数运行时所在的环境。对于obj.foo()来说,foo运行在obj环境,所以this指向obj;对于foo()来说,foo运行在全局环境,所以this指向全局环境

var obj = {
  foo: function () { console.log(this.bar) },
  bar: 1
};

var foo = obj.foo;
var bar = 2;

obj.foo() // 1
foo() // 2

参考:http://www.ruanyifeng.com/blog/2018/06/javascript-this.html

原文地址:https://www.cnblogs.com/wcx-20151115-hzz/p/14980933.html