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();
}
}