• 浅谈THIS的指向问题


    this的指向在很多时候会把人弄的很懵,但是笔者可以肯定的说,你看完这篇文章绝对能弄懂this的指向。

    在不同的场景this分别指向谁:
    一:纯粹的函数调用

    var x = 1;
    function test() {
    console.log(this.x)	//指向window,输出1
    }
    test()	//这个其实是window.test()的简写
    

      


    此时是window调用的test方法,所以函数体里的this就指向了window。
    二:作为对象的方法调用

    function test () {
    console.log(this.x)	//指向obj,输出2
    }
    var obj = {};
    obj.x = 2;
    obj.m = test;
    obj.m();
    

      

    此时的test函数被用作了obj对象的方法来调用的,所以test里的this就指向了obj。
    三:作为构造函数调用

    var x = 4;	//定义全局变量,为了用来测试
    function Test () {
    this.x = 11;	//this指向newObj
    }
    var newObj = new Test();
    console.log(newObj.x)	//输出11
    console.log(x)	//输出结果为4,表明全局变量没有被this.x影响
    

      


    四:apply调用后

    var x = 0;
    function test() {
    console.log(this.x);
    }
    var obj = {};
    obj.x = 1;
    obj.m = test;
    obj.m.apply();	//0
    test.apply(obj);	//1
    new test();	//undefined
    test.apply();	//0
    

      


    apply()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数。
    关于改变this的其他方法,如bind(),call()与apply的区别请到此观看:更改this指向的方法详细介绍。

    总结:通常在函数中的this指向的是调用函数的哪个对象(谁调用指向谁)事件函数中的this通常指向的是绑定事件的事件源元素构造函数中的this,(使用new调用构造函数创建对象),通常指向的是new所创建出来的对象本身全局范围的this通常指向的是全局对象(浏览器中是window)一句话总结:关于this的指向问题,我们可以用一句话简单又好记的去描述它:谁调用就指向谁!

  • 相关阅读:
    bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟
    bzoj 1050 [ HAOI 2006 ] 旅行comf —— 并查集
    洛谷P2593 [ ZJOI 2006 ] 超级麻将 —— DP
    bzoj 3029 守卫者的挑战 —— 概率DP
    poj 2288 Islands and Bridges ——状压DP
    bzoj 1029 [ JSOI 2007 ] 建筑抢修 —— 贪心
    bzoj 3743 [ Coci 2015 ] Kamp —— 树形DP
    bzoj 1053 [ HAOI 2007 ] 反素数ant ——暴搜
    【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)
    构造类斐波那契数列矩阵(矩阵
  • 原文地址:https://www.cnblogs.com/helloworld3/p/11192390.html
Copyright © 2020-2023  润新知