181 this指向问题

​ this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象。

现阶段,我们先了解一下几个this指向

  1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window) 【全局作用域下的变量、函数会作为window对象的属性、方法,只是通常省略window。】

  2. 方法调用中谁调用this指向谁 【即对象中的方法指向对象自己。】

  3. 构造函数中this指向构造函数的实例。

        // this 指向问题 一般情况下this的最终指向的是那个调用它的对象

        // 1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
        console.log(this);

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

        window.setTimeout(function() {
            console.log(this);
        }, 1000);


        // 2. 方法调用中谁调用this指向谁
        var o = {
            sayHi: function() {
                console.log(this); // this指向的是 o 这个对象
            }
        }
        o.sayHi();

        var btn = document.querySelector('button');
        // btn.onclick = function() {
        //     console.log(this); // this指向的是btn这个按钮对象
        // }

        btn.addEventListener('click', function() {
            console.log(this); // this指向的是btn这个按钮对象
        })

        // 3. 构造函数中this指向构造函数的实例
        function Fun() {
            console.log(this); // this 指向的是fun 实例对象
        }
        var fun = new Fun();

this

函数执行的主体(不是上下文): 意思是谁把函数执行的,那么执行主体就是谁。

北京饭店 吃饭,我是主体,北京饭店是上下文。】

THIS非常的不好理解,以后遇到THIS,想一句话:“你以为你以为的就是你以为的”

  1. 给元素的某个事件绑定方法,当事件触发方法执行的时候,方法中的this是当前操作的元素本身。

  2. 如何确定执行主体(this)是谁?

    当方法执行时候,我们看方法前面是否有点:

    (1)没有点,this是window 或 undefined;

    (2)有点,点前面是谁this就是谁。

var name = '杰帅';
function fn(){
    console.log(this.name);
}
var obj = {
    name: "你好世界",
    fn: fn
};
obj.fn(); // => this: obj  【前面有点】
fn(); // => this: window(非严格模式是window,严格模式下是undefined) window.fn()把window.省略了

(function(){
	//自执行函数中的this是window 或 undefined    
})();
原文地址:https://www.cnblogs.com/jianjie/p/12180957.html