js中的this

在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了

在构造函数时,this指向的是即将new出来的对象函数。如果不通过new,直接调用Foo函数,那么他的this指向的就是window。


    function Foo() {
        this.name = '马朝阳';
        this.year = '1990';
        console.log(this)
    }
    var f1 = new Foo();
    console.log(f1.name);
    console.log(f1.year);
    Foo();

如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对象。

    var obj = {
        x:10,
        fn:function () {
            console.log(this);
            console.log(this.x);
        }
    };
    obj.fn();

如果fn函数被赋值到了另一个变量中,并没有作为obj的一个属性被调用,那么this的值就是window,this.x为undefined。

    var obj = {
        x:10,
        fn:function () {
            console.log(this)
            console.log(this.x)
        }
    }
    var fn1 = obj.fn;
    fn1();

当一个函数被call和apply调用时,this的值就取传入的对象的值

    var obj = {
        x:10
    }
    var fn = function () {
        console.log(this);
        console.log(this.x)
    }
    fn.call(obj);

在全局环境下,this永远是window。普通函数在调用时,其中的this也都是window

    console.log(this === window);
    var x =10;
    var fn = function () {
        console.log(this);
        console.log(this.x);
    };
    fn();

下面的情况你需要注意一下:

    var obj = {
        x:10,
        fn:function () {

            console.log(this);
            function f() {
                console.log(this);
                console.log(this.x);
            }
            f();
        }
    };
    obj.fn();

随机浏览