javscript中this初探

This

This是什么:
this是一个迥殊的关键字,是自动定义在所有函数和全局的作用域中。this是在运行时绑定的,而不是声明时绑定的。

为何要有this
假定不存在this关键字,那末关于一个函数依据差别上下文背景下的复用就用传入参数

        var obj = Object.create(null);

        obj.name = 'Nico';

        function speak(context) {
            console.log(context.name + " speaks a word");
        }

        speak(obj);

this指向的几种状况:
1、平常状况下,this是指向当前执行时的对象

var person = {
    name: 'nico',
    getName: function() {
        console.log(this.name)
    }
}

var name = 'siip';

person.getName(); //nico

person对象挪用getName要领,所以当前this指向的是person对象

2、假如没有明白对象时,this指向全局对象(在非严厉形式下,在严厉形式下,函数绑定undefined,也就是this指向undefined)

var name = 'siip';

function className() {
    console.log(this.name);
}

className();//siip

实在这里的className可类似于window.className,所以当前this指向window
3、setTimeout、setInterval、匿名函数this指向全局对象

var person = {
    name: 'nico',
    fns: function() {
        setTimeout(function() {
            console.log(this.name)
        }, 100);//siip

        setInterval(function() {
            console.log(this.name)
        }, 100);//siip

        (function() {
            console.log(this.name)
        })()//siip
    }
}
var name = 'siip';
person.fns();

这些要领都比较轻易明白this的指向,由于匿名函数或许定时器函数都是挂载window上的函数,挪用者是window对象,这些函数里声明的函数,也指向挪用者,类似于:

        function foo() {
            function bar() {
                console.log(this)
            }
            bar();
        }

        foo();

4、apply、call可以转变this指向(无参数时或许传入null、undefined,指向window)

    var person = {
        name: 'nico',
        applyFns: function() {
            console.log(this.name)
        }
    }
    var name = 'siip';
    person.applyFns();//nico
    person.applyFns.apply();//siip

有时候,

5、new Function 组织函数中的this指向该组织函数new出来的对象。

由于new Function的历程也许:

  1. 建立一个新的空对象
  2. 空对象_proto_指向Function.prototype
  3. 空对象与当前函数挪用的this绑定
  4. 返回新建立对象

所以new Function中的this指向return的对象。

小结

this的指向取决于函数执行时的块级上下文

    原文作者:NicolaChin
    原文地址: https://segmentfault.com/a/1190000013262142
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞