首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么yargs.argv导致处理程序函数调用

为什么yargs.argv导致处理程序函数调用
EN

Stack Overflow用户
提问于 2021-06-27 23:44:43
回答 1查看 333关注 0票数 1
代码语言:javascript
复制
const yargs = require("yargs");

yargs.version = "1.0.0";

yargs.command({
  command: "add",
  describe: "do addition ",
  handler: function () {
    console.log("addition complete");
  },
}).argv;

在上面的代码中,使用yargs,我试图创建一个命令,添加,在使用node . add运行脚本时,将执行处理程序函数,并得到预期的输出

节点美元。添加 加法完成

但是,在没有.argv的情况下运行相同的代码时,输出为空,处理程序函数不执行。在文档中,没有说明.argv是什么,它是否是一个对象或函数,以及它是如何工作的。乍一看,它看起来像是一种正常的方法调用,但是

当您执行以下操作时

console.log(typeof yargs.argv);

输出是

节点美元。添加 加法完成 对象

如果yargs.argv和任何其他对象一样,那么只需访问它,就可以调用函数的方式和原因。

有人能解释一下到底发生了什么吗我错过了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-29 04:14:57

Yargs使用的是#getter,这允许javascript在调用属性时调用函数。

示例:

代码语言:javascript
复制
const obj = {
  log: ['a', 'b', 'c'],
  get latest() {
    if (this.log.length === 0) {
      return undefined;
    }
    return this.log[this.log.length - 1];
  }
};

console.log(obj.latest);
// expected output: "c"

如果你看一下源代码,你可以看到当你调用.argv时,亚尔格只会调用.parse()

代码语言:javascript
复制
 const yargs = new YargsInstance(processArgs, cwd, parentRequire, _shim);
 // Legacy yargs.argv interface, it's recommended that you use .parse().
 Object.defineProperty(yargs, 'argv', {
     get: () => {
        return yargs.parse();
      },
     enumerable: true,
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68156122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档