javascript - 关于this的指向
天蓬老师
天蓬老师 2017-04-11 12:34:42
[JavaScript讨论组]
var a = 20;
var obj = {
    a: 10,
    c: this.a + 20,
    fn: function () {
         return this.a;
     }
}
            
console.log(obj.c);   //40
console.log(obj.fn());//10

第二个可以理解,第一个为什么是全局呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
高洛峰

看你上面的评论就能看出你没理解js中的this 在js中this的指向跟定义没关系 只取决于调用模式
console.log(obj.c);就相当于console.log(this.a+20) 在这种情况下 this毋庸置疑是指向全局的
第二种 console.log(obj.fn());//10是方法调用 this 就只想包含这个函数的对象

    1. 普通函数调用,this为全局对象或是undefined
    2. 作为对象的方法,this为那个对象
    3. new 表达式,this为以该函数为原型的新创建的对象
    4. 使用 apply/call指定 this
    5. 用bind绑定固定的this
    6. 事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)
高洛峰
    var obj = {
        c: this
    };
    console.log(obj.c); //window

c是obj对象的属性,那么为毛这个this是window不是obj本身?换个写法。。

    var obj = new Object();
    obj.c = this;
    console.log(obj.c); //window

这样this很明白的就是全局window了吧,和在函数里的this是两回事

高洛峰

obj.c = this.a + 20
console.log(obj.c)
等于
console.log(this.a + 20), 这个this指向全局

巴扎黑

函数里的this是动态的,对象字面量里的this不是吧。

阿神

外部的a和obj是全局环境定义的两个变量

es5中的this是在函数调用时确定的,当没有函数调用时,this指向全局。所以obj.c的this指向全局环境;当以对象里的方法的方式调用函数时,它们的 this 是调用该函数的对象,所以第二个this指向obj

es6箭头函数的this与es5不同,它在定义时就确定了指向(当对象的方法中又嵌套了一个函数,在es5中嵌套函数中的this指向全局)
比如

var a = 20;
    var obj = {
        a: 10,
        c: this.a + 20,
        fn: function () {
             return (function(){
                 console.log(this)
             })();
         }
    }
           
console.log(obj.fn());  // Window
var a = 20;
    var obj = {
        a: 10,
        c: this.a + 20,
        fn: function () {
             return (() => {
                console.log(this)
             })();
         }
    }
           
console.log(obj.fn());  // Obj
天蓬老师

this是谁调用的指向谁,第一个this是window调用的,所以指向的全局

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号