Javascript 我得到;没有这种方法”;使用ES6静态函数时
我正在尝试为我在react native中处理的项目创建一个包含静态函数的“utils”类 我读过关于如何在StackOverFlow中生成静态函数的文章,但由于一些奇怪的原因,它对我不起作用Javascript 我得到;没有这种方法”;使用ES6静态函数时,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我正在尝试为我在react native中处理的项目创建一个包含静态函数的“utils”类 我读过关于如何在StackOverFlow中生成静态函数的文章,但由于一些奇怪的原因,它对我不起作用 //utils.js 'use strict' export default { textFormat(args) { var s = args[0]; for (var i = 0; i < args.length - 1; i++) { var
//utils.js
'use strict'
export default {
textFormat(args) {
var s = args[0];
for (var i = 0; i < args.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, args[i + 1]);
}
return s;
}
}
//main file
import * as Utils from './utils/utils';
/**
/...
**/
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
//utils.js
“严格使用”
导出默认值{
文本格式(args){
var s=args[0];
对于(变量i=0;i
但我一直收到这样一个错误“Utils.textFormat不是函数”,我做错了什么?幸好您的工作正常,但我只想添加一个更接近您最初尝试的解决方案,并注意其中的要点 不需要使用
class
导出一堆静态方法。我看不出它将如何为代码增加功能性、易用性或清晰性。事实上恰恰相反,语法看起来比导出普通的旧ES5样式的对象更冗长,当我们将ES6+的甜味融入其中时更是如此
您最初的utils模块示例运行得很好。问题在于进口 由于您只是导出一个默认对象,正确的导入方法是
import Utils from './utils/utils';
没有括号,没有星号,只有导入的默认对象的名称,然后可以像var text=Utils.textFormat(…)
那样使用
不过,我们可以走得更远。通过抛弃整个“导出一个默认对象”的方法,我们可以充分利用模块系统的功能
utils.js:
现在导出的函数可以像这样使用
import * as Utils from './utils/utils';
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import {textFormat} from './utils/utils';
var text = textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import*作为“/Utils/Utils”中的Utils;
var text=Utils.textFormat(rowData.text,“你好”);
还是像这样
import * as Utils from './utils/utils';
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import {textFormat} from './utils/utils';
var text = textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
从“/utils/utils”导入{textFormat};
var text=textFormat(rowData.text,“你好”);
无论你喜欢哪一种。你在混合链接问题中列出的两种方法,这是行不通的。应该是
// utils.js
export default {
textFormat(args) {
var s = args[0];
for (var i = 0; i < args.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, args[i + 1]);
}
return s;
}
}
//utils.js
导出默认值{
文本格式(args){
var s=args[0];
对于(变量i=0;i
//主文件
从“/Utils/Utils”导入Utils;
…
var text=Utils.textFormat(rowData.text,“你好”);
或
//utils.js
导出函数textFormat(args){
var s=args[0];
对于(变量i=0;i
//主文件
从“/Utils/Utils”导入*作为Utils;
…
var text=Utils.textFormat(rowData.text,“你好”);
(后者更可取)您可以尝试从“/Utils/Utils”导入Utils吗??这应该符合您当前的定义。您没有命名export,但只导出一个对象。@bebraw这样做只会给我textFormat未定义错误。@zerkms谢谢,我不确定我是否理解。我应该换什么?我现在明白我的错误了,谢谢你的回答,我删除了我的我用了你的答案?在
utils.js
中定义类是最好的方法还是更好?@b24不,只使用class
语法定义静态方法是个糟糕的主意。
// utils.js
export function textFormat(args) {
var s = args[0];
for (var i = 0; i < args.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, args[i + 1]);
}
return s;
}
// main file
import * as Utils from './utils/utils';
…
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");