javascript - 为什么js对象的属性不能用this调用另一属性
天蓬老师
天蓬老师 2017-04-11 11:26:45
[JavaScript讨论组]
obj = {
    a: 123,
    b: this.a
    c: function () {
        return this.a;
    }
};
obj.b; // undefined
obj.c(); // 123

请问这是为什么?


谢谢大家为我解答这个问题,现在我已经明白是怎么回事了。

总结一下:

1、在全局运行上下文中(在任何函数体外部),this 指代全局对象,无论是否在严格模式下。
2、在函数内部,this的值取决于函数是如何调用的。

感谢 @不爱吃西红柿的鱼
分享一下他的文章,让我受益匪浅:js中this的一些总结

天蓬老师
天蓬老师

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

全部回复(4)
伊谢尔伦

谢邀。你这是对象字面量的形式在申明一个对象变量。

相当于

obj = new Object();
obj.a=123;
obj.b = this.a;

此时的this指向的是不是obj这个对象,而是当前作用域空间的那个this指向。

高洛峰

这是作用域问题,你b属性里的this其实是指向了父级作用域,这个对象本身无法创建作用域,所以你的this.a指向了与obj平级的a,但是你并没有定义过这样的a,于是就是undefined了.
你可以通过函数来创建一个作用域

obj = {
    a: 123,
    b: function () {
        return this.a
    }
};

obj.b() // 123

如果你觉得obj.b()麻烦,还可以这样玩

obj = {
    a: 123,
    get b() {
        return this.a
    }
};

obj.b // 123
怪我咯

这个this指向的window

迷茫

你要明白,那个this的指针,并不是指向obj的,而是指向的window,而window内并没有声明a,所以返回undefined:

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

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