zoukankan      html  css  js  c++  java
  • 关于this的问题

    链接:https://www.nowcoder.com/questionTerminal/ad1aab0fd50a4185ac1ae450096d9095
    来源:牛客网

    var myObject = {
        foo: "bar",
        func: function() {
            var self = this;
            console.log(this.foo);  
            console.log(self.foo);  
            (function() {
                console.log(this.foo);  
                console.log(self.foo);  
            }());
        }
    };
    myObject.func();
    依次输出  bar  bar  undefined bar
     
    理解关键:方法/函数是由谁(对象) 调用 的,方法/函数内部的 this 就指向谁(该对象);
     
    注意:被谁调用,不是处于谁的作用域,即使在作用域
     
    1、func是由myObject调用的,this指向 myObject。
    2、self指向myObject,相当于 myObject的this的副本。
    3、这个立即执行匿名函数表达式(IIFE)是由window调用的,this指向 window 。第三个是闭包,this指向window。
    4、IIFE的作用域处于myObject.func的作用域中,本作用域找不到self变量,沿着作用域链向上查找self变量,找到了指向 myObject对象的 self。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1.this总是指向调用它的那个对象,如果是立即执行函数或者setTimeOut()这样的全局(window)函数则this指向的是window对象即this为全局的this.x中的x为全局变量
    2.js的作用域链,如果本作用域着不到对象就向上一层找
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    var color = "green";
    var test4399 = {
          color:"blue",
          getColor:function (){
                       var color = "red";
                       alert(this.color);
                }
       }
    var getColor = test4399.getColor;
    getColor();
    test4399.getColor();
    1.getColor()     var getColor = test4399.getColor;将test4399对象内部的getColor和全局作用域中的getColor指向同一个函数,相当于在全局作用域中定义了一个函数,即var getColor = function(){var color = "red";alert(this.color);};执行getColor()函数时this指向的window,因为window.color为green,所以弹出green
    2.test4399.getColor()   此时this指向的是test4399,test4399.color为blue,所以弹出blue
  • 相关阅读:
    变量和值的延伸思考
    一念之想--多维数组
    java扫描控制台输入
    java字符转义
    javaee开发工具及环境配置过程
    java数组、泛型、集合在多态中的使用及对比
    flex的Accordion组件头部文本居中显示
    Visual Studio解决方案及项目的配置
    Away3D引擎学习入门笔记
    使用photoshop,把图片背景变成透明
  • 原文地址:https://www.cnblogs.com/aixiuxiu/p/6543633.html
Copyright © 2011-2022 走看看