• js中的this关键字


    this代表的是 执行这个this代码的环境对象

    也可以说是this指的是 这个代码块的调用者是

    var obj={

                name:"karen",

                sayname:function(){

                    console.log(this)

                }

            }

             obj.sayname() 

    这个例子在控制台打印的就是obj 因为是obj去调用这个sayname函数

    如果直接在全局作用下打印时this 的话 他指向的是window全局对象

    console.log(this)

    function fn6666(){

                console.log(this,1111111111)

            }

    fn6666()

    像这样直接在全局作用域下去调用的写法

    其实就是window.fn6666()

    所以this也指向了window

    全局变量会在脚本执行时 把变量名设置为全局对象window的属性

    也就是说 

    var a=20

    本来window对象是固定的 他是由系统本身定义的

    现在这window这个全局对象中添加了一个名为a的属性

    现在我们来说一下对象调用方法

    刚刚我们的函数都是直接写在全局对象中的

    现在有一个函数他是写在一个我们自定义的对象中的

            var obj={

                name:"karen",

                fn:function(){

                    console.log(this)

                }

            }        

            obj.fn() 

    这个this指向的就是对象obj 因为obj去调的这个fn函数

    可以理解为.语法前面的就是调用者

    var obj2={fn:function(){console.log(this,1111)}}

              var arr=[]

              arr[0]=100

              arr[1]=obj2.fn 

              console.log(arr[1])

              arr[1]()

    我们创建了一个新的数组

    添加的一个数据是100 添加的第二数据是对象obj2中的fn函数

    然后我们通过下标在数组中找到这个fn函数然后调用 现在这个调用者就变成了arr这个数组

     var obj={

                  name:"芭比",

                  son:{

                      name:"儿子",

                      say:function(){

                          console.log(this)

                      }

                  }

              }

              obj.son.say()

    像是这个嵌套了多级的对象调函数 this指向的还是.语法函数前面一级的调用者

    函数可以不写函数名

    var a=function(){}

              a()

    可以创建一个函数把他保存在一个变量中

     function fn(){

                  return function fm(){

                      console.log(this)

                  }

              }

    fn()()

    连着的两个小括号说明fn函数调用后返回值又是一个函数然后接着调用

    this还是指向window

    this有什么用呢

    为了方便去操作对象的成员

    this.xx=xx

      var obj={

                    name:"karen",

                    say:function(){

                        console.log(this)//obj

                        function fn(a){

                            console.log(a,this)//obj winodw

                        }

                        // var a=this

                        // fn(a)

                        fn(this)//fn(obj)

                    }

                } 

                 obj.say()//obj

    这个题的难点就在于 console.log(a,this)//obj winodw

    this为什么指向的是window 首先我们要去看看fn函数的调用者是谁

     fn(this)//fn(obj)是这一句所以是window

    (function(){})()这种方法又称为函数的自调用

      var name = 'lili';

                var obj = {

                    name: 'liming',

                    prop: {

                            name: 'ivan',

                            getname: function() {

                            return this.name;

                            }

                          }

                };

                console.log(obj.prop.getname());//ivan

                var test = obj.prop.getname;

                console.log(test());//lili

    这个题就考验了前面的知识

    function Foo() {

                  getName = function () {console.log (1)};

                  console.log(this) 

                  return this;

                 }

                 var getName = function () {console.log (4);};

                 Foo().getName ();

    //1

    为什么是1?

    函数本身是不运行的 

    后面var getname定义了这个变量 当foo函数运行时候 因为在函数体内找不到getname这个变量就会在上一个作用域中找也就是全局作用域中找也就找到了全局变量getname把getname这个函数修改了 所以是1

  • 相关阅读:
    深入理解MySQL索引:从原理到最佳实践
    CSS绘制各种三角形
    Qiskit系列(1)---Qiskit安装
    Linux:ip:rx_dropped; 丢包
    ubuntu下docker环境使用GPU配置
    在“美国死海”边的科研盛会 ACM CCS‘24 截稿日期逼近 行动要快
    Scala入门到精通(尚硅谷学习笔记)章节五——变量和数据类型
    Phillweston 自动驾驶 决策规划算法 面经
    npm常用命令详解
    Vatee万腾科技创新之路:Vatee的智能时代掌舵人
  • 原文地址:https://blog.csdn.net/weixin_53596260/article/details/125483054