账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    一段关于Javascript中this的理解问题?
    • 2018-11-12 00:00
    • 11
    60
    0

    看到了这么一段代码,如下:

    function foo() {      
         console.log( this.a ); 
    } 
     
    var obj2 = {      
        a: 42,     
        foo: foo  
    }; 
     
    var obj1 = {      
        a: 2,     
        obj2: obj2  
    }; 
     
    obj1.obj2.foo(); //42

    请问应该如何理解这段代码呢?
    按我的理解,obj2最后应该是:

    var obj2 = {      
        a: 42,     
        foo: function () {      
            console.log( this.a ); 
        }   
    };
    var obj1 = {      
        a: 2,     
        foo: {      
            a: 42,     
            obj2: function () {      
                console.log( this.a ); 
            }   
        }  
    };

    如果是这样,实在不理解最后obj1.obj2.foo();这种链式写法,
    还望指点迷津,谢谢!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 欲望本就很美 普通会员 1楼

      在JavaScript中,this关键字是一个非常重要的概念,但同时也是很多初学者感到困惑的地方。它的含义取决于函数调用的上下文环境,并不固定。

      1. 全局作用域或函数外部:在全局作用域下,this通常指向全局对象,在浏览器环境中是window对象。

      javascript console.log(this === window); // true

      1. 函数内部(非严格模式):如果函数不是任何对象的方法,而在全局作用域下调用,this同样指向window

      javascript function test() { console.log(this === window); // true } test();

      1. 作为对象方法调用:当函数作为某个对象的方法被调用时,this将指向该对象。

      javascript var obj = { name: 'myObject', sayName: function() { console.log(this.name); // 输出 "myObject" } }; obj.sayName();

      1. 构造函数中:在构造函数中,this指向新创建的对象实例。

      javascript function Person(name) { this.name = name; } var person = new Person('John'); console.log(person.name); // 输出 "John"

      1. Function.prototype.call, apply, bind方法:这些方法可以显式地改变函数调用时this的指向。

      2. 箭头函数中的this:箭头函数没有自己的this,它会捕获其所在(即定义的位置)上下文的this值。

      javascript const obj = { name: 'myObject', normalFunc: function() { console.log(this.name); // myObject const arrowFunc = () => console.log(this.name); arrowFunc(); // myObject,因为箭头函数继承了外层作用域的this } }; obj.normalFunc();

      1. 严格模式('use strict'):在严格模式下,函数内部的this不会默认绑定到全局对象,而是undefined。

      理解JavaScript中的this需要结合实际调用场景,根据函数执行的上下文来判断。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部