Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在“函数”上下文中递归调用函数;导出默认值";?_Javascript_Node.js_Reactjs_Es6 Modules - Fatal编程技术网

Javascript 在“函数”上下文中递归调用函数;导出默认值";?

Javascript 在“函数”上下文中递归调用函数;导出默认值";?,javascript,node.js,reactjs,es6-modules,Javascript,Node.js,Reactjs,Es6 Modules,这对其他人来说可能很明显,但我不知道在以下代码中递归调用函数的语法: //request.js export default { send() { ... do stuff ... this.send(); // Can't call "send" of undefined } } //main.js import request from './request' export default class Main ext

这对其他人来说可能很明显,但我不知道在以下代码中递归调用函数的语法:

//request.js
    export default {

      send() {
       ... do stuff ...
       this.send(); // Can't call "send" of undefined
      }
    }

//main.js
import request from './request'

export default class Main extends Component {
   init() {
      request.send();
  }
}

在上面的示例中,我从main.js调用send函数。所有这些都工作正常,但我在send函数中有一个条件,它将调用相同的函数。问题是我不知道如何从函数内部调用函数。有人吗?

好吧,我想说的是,你应该

 console.log(this)
在第一个和第二个请求中查看它的值。 我没有构建代码来检查它,但我认为这是您的上下文的问题

仍然不确定您试图实现什么,但您可以随时使用

 someFunction.bind(this)

同样,它很模糊,但可能会给你一个想法。

如果你想在Node.js中递归调用默认导出,使用Babel.js进行transfile,你可以使用exports对象:

// request.js

export default {
  send() {
    console.log('Yo');
    setTimeout(() => {
      exports.default.send();
    }, 1000);
  },
};
进口:

// main.js

import request from './request';

request.send(); // Writes "Yo" to the console once per second
这是因为Babel.js只是转换为CommonJS语法。这:

export default 42;
变成这样:

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports.default = 42;

不知道在Node.js中ES6模块的未来实现中这可能会发生什么变化。

鉴于您正在使用方法导出对象,我看不出有任何理由
this.send()
不起作用

但如果它不起作用,则始终可以使用命名函数表达式:

export default {
  send: function send() {
    … send() …
  }
};
或命名函数声明:

function send() {
  … send() …
}
export default { send };
或者只命名导出的对象:

export default const request = {
  send() {
    … request.send() …
  }
};
但我建议不要默认导出对象,而是使用命名导出,以便可以单独导入或在命名空间对象上导入它们:

// request.js
export default function send() {
  … send() …
}


我认为这是一个简单的解决方案

//request.js
export function send () {
  ... do stuff ...
    send(); // Can't call "send" of undefined
}

//main.js
import {send} from './request'

export default class Main extends Component {
  init() {
    send();
  }
}

现在还不完全清楚你想要完成什么。你能提供更多的信息,可能还有更多的代码吗?此外,语法
send(..)
看起来无效,因为括号中的内容必须是参数列表,并且您的示例在参数列表中似乎有任意javascript代码。@很抱歉,语法不正确。我做了一些编辑以更好地说明我的问题;导出默认值{send}?@user3297291-没有原因,但仍然好奇有人会如何处理这种情况。我看不出任何原因说明此代码不起作用(除了可能的无限循环)。在什么情况下,
无法调用正在生成的未定义的
消息的“发送”?你一定还有别的东西没给我们看。
//request.js
export function send () {
  ... do stuff ...
    send(); // Can't call "send" of undefined
}

//main.js
import {send} from './request'

export default class Main extends Component {
  init() {
    send();
  }
}