使用'这个'在要求文件中

时间:2017-06-19 06:14:50

标签: javascript node.js module

我已经在另一个项目中编写了一个node.js软件包供个人使用。我一直在从GitHub链接安装它。它工作得很好,但一切都在一个文件中,这很好,但现在我需要为它添加新的功能,因此我认为将它分成多个文件是个好主意。

因此我创建了一些文件来使其工作,但让我用两个文件index.jsutils.js来解释它。

方法1:

//index.js
const utils = require('./utils.js');
module.exports = {
  indexProperty1:{},
  indexProperty2:[],
  indexFunction1:function(){
    utils.utilsFunction1();
    //some other code
  },
  indexFunction2:function(){
    utils.utilsFunction2();
    //some other code
  }
}

//utils.js
module.exports = {
  utilsProperty1:{},
  utilsProperty2:[],
  utilsFunction1:function(){
    console.log(this); //Prints values of index object
    this.utilsFunction2(); //TypeError: this.utilsFunction2 is not a function
  },
  utilsFunction2:function(){}
}

方法2:

//index.js
const utils = require('./utils.js');
var index = {};
index.indexProperty1 = {}
index.indexProperty2 = []
index.indexFunction1 = function(){
  utils.utilsFunction1();
  //some other code
}
index.indexFunction2 = function(){
  utils.utilsFunction2();
  //some other code
}
module.exports = index;

//utils.js
var utils = {};
utils.utilsProperty1 = {}
utils.utilsProperty2 = []
utils.utilsFunction1 = function(){
  console.log(this); //Prints values of index object
  this.utilsFunction2(); //TypeError: this.utilsFunction2 is not a function
}
utils.utilsFunction2: = function(){}
module.exports = utils;

在这两种情况下,this的值都是index对象。因此,从this.utilsFunction2()对象调用utils的任何方法都会TypeError

所以我的问题是如何定义utils对象以便我可以在其中使用this,为什么utils对象中的这个对象引用index

次要问题:在上面的例子中,使用一种方法是否有任何优势?

2 个答案:

答案 0 :(得分:0)

希望这是一个例子,它有很多问题。第一个是你必须在不同的modules.exports值之间使用逗号,第二个为什么你在我认为是你的主要内容(index.js)内有导出?

以下是一些有效的示例代码,不确定它是否正是您想要的,但您的问题令人困惑:

utils.js

module.exports = {
  utilsFunction1:function(){
    this.utilsFunction2(); 
  },
  utilsFunction2:function(){
    console.log("success");
  }
}

index.js

const utils = require('./utils.js');

utils.utilsFunction1();

答案 1 :(得分:0)

使用Node& ES6,我建议你使用Class和Extends

// utils.js

class utils {
  utilsFunction1() {
    this.utilsFunction2(); 
  },
  utilsFunction2() {
    console.log("success");
  }
}

module.exports = utils;

// index.js

var utils = new(require('./utils.js'));
class index {
  indexFunction1() {
    utils.utilsFunction1();
    //some other code
  }
  indexFunction2() {
    utils.utilsFunction2();
    //some other code
  }
}

或者:使用extends class:index extends utils

希望它对你有所帮助。

感谢。