为了账号安全,请及时绑定邮箱和手机立即绑定

js对象内调用自身属性 this调用不到

js对象内调用自身属性 this调用不到

不负相思意 2019-02-14 22:34:27
在js的对象里,调用自身属性,不知道如何调用const path = require('path');module.exports = {    assetsDirName: 'dist',    assetsRootPath: path.resolve(__dirname, '../', this.assetsDirName)};大家帮忙看看指点一二
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

var test={

a:1,

b:this.a

}

console.log(test.b)

来来来,你说一下 test.b 等于多少?


不要想当然自意识认为一个东西,用一个东西首先要去了解这个东西,this 是什么?


首先我们需要得出一个非常重要一定要牢记于心的结论,this的指向,是在函数被调用的时候确定的。


为了你更直观的理解,我们先来看看这个 demo:


 var a = 'global'

    

    var path = {

        a: 'path',

        resolve: function(parm) {

            console.log(parm)

            console.log(this)

        }

    }

    var obj = {

        a: 'obj',

        b: path.resolve(this.a)

    }

看看输出结果你明白了什么?是不是什么也没明白。


其中的 this.a 中的 this 是全局对象,如果全局对象是 window,那么这个 this 就是 window 对象,如果全局在 node 环境下,那么这个 this 就是 global 对象。


关于全局对象的 this,它是一个比较特殊的存在。全局环境中的 this,指向它本身。因此,这也相对简单,没有那么多复杂的情况需要考虑。


// 通过this绑定到全局对象

this.a2 = 20;


// 通过声明绑定到变量对象,但在全局环境中,变量对象就是它自身

var a1 = 10;


// 仅仅只有赋值操作,标识符会隐式绑定到全局对象

a3 = 30;


// 输出结果会全部符合预期

console.log(a1);

console.log(a2);

console.log(a3);

你说说你这个代码里面的 this 是指向 path 还是 全局对象 window 或者 global 呢?


反正不是指向 module.exports,所以就得不到你想要的结果。


查看完整回答
反对 回复 2019-02-15
  • 1 回答
  • 0 关注
  • 1493 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信