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

在js的对象里,调用自身属性,不知道如何调用

const path = require('path');

module.exports = {
    assetsDirName: 'dist',
    assetsRootPath: path.resolve(__dirname, '../', this.assetsDirName)
};

大家帮忙看看指点一二

阅读 9.9k
4 个回答
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,所以就得不到你想要的结果。

const path = require('path');

const assetsDirName = 'dist';
const assetsRootPath = path.resolve(__dirname, '../', assetsDirName);

module.exports = {
    assetsDirName: assetsDirName,
    assetsRootPath: assetsRootPath
};

遵从一个原则,就是this指的是,调用函数的那个对象。
所以你代码中的this.assetsDirName里的this指向的全局对象

为dist建一个assetsDirName局部变量,exports都是对外暴露的接口。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题