zoukankan      html  css  js  c++  java
  • javascript有关this的那些事(某渣提出的问题)

    某人提出

    请教下谁能解释下这个值
    var name = "The Window";
            var object = {
                name: "My Object",
                getName: function () {
                    return this.name;
                }
            };
     alert((object.getName = object.getName)());
    --------The Window

    经过解释之后

    object.getNameFunc()();  我理解是the window,
    但是(object.getName = object.getName)() 怎么也是the window呢?

    var a = 1;
    a = a返回啥,你就知道为什么是the window了

    最后某神举例

    var name = "The Window";   
      var object = {  
        name : "My Object",  
        getNameFunc : function(){  
            return this.name;  
        }   
    };  
    var a = object.getNameFunc;
    alert(a());//The Window
    alert(object.getNameFunc());  //My Object

    最后某神解释

    因为a()实际上是window.a()
    所以执行a()的时候this指向window
    this.name就是window.name

    object.getName = object.getName;
    alert(object.getName());  //My Object
    alert((object.getName = object.getName)());//"The Window" 
    还是不明白 为啥第一个是obj 第二个是window

    这个解释怎么理解啊

    最后他明白了

    某渣:我大概明白了 执行 

    alert((object.getName = object.getName)); 返回
     function () {
                    return this.name;
                }
    这里this 就是window了

    额,对的
     

    某渣:是吧
     

    就是这
     

    某渣:就是一对()返回一个函数

    (object.getName = object.getName)返回的实际上是=运算的结果

    某渣:多谢大家
     
     

    圆满解决

    某神总结

    当一个函数作为函数而不是方法来调用的时候,this指向的是全局对象
    当函数作为某个对象的方法来调用时,this指向那个对象

    object.getNameFunc() ,此时的 object.getNameFunc 为引用类型,其 base 为 object,this 指向的是 base,所以返回 object.name 的值

    name = object.getNameFunc, test 作为标识符,生成了其他引用类型的值,此时 base 已经从 object 重置为 null,也就是会指向 global(window),所以返回的是 window.name 的值。

    问题的关键在于「引用类型(type Reference)的中间值发生改变」

  • 相关阅读:
    Java快速教程
    让我们来了解一下:操作系统和平台相关性
    初窥Linux 之 我最常用的20条命令
    ES6学习笔记一
    Data时间管理大全
    generator多返回值写法
    箭头函数=>
    闭包
    高阶函数:map/reduce
    函数方法that与apply
  • 原文地址:https://www.cnblogs.com/LoveOrHate/p/4421840.html
Copyright © 2011-2022 走看看