使用 ES6 静态函数时,我得到“没有这样的方法”
I get "no such method" when using ES6 static functions
我正在尝试为我在 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 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.textFormat 不是函数",我做错了什么?
很好,你让事情正常,但我只想添加一个更类似于你最初尝试做的解决方案,并注意你链接的 SO 问题中提出的观点。
只是不需要使用 class
来导出一堆静态方法。我不明白它将如何为代码添加功能、易用性或清晰度。实际上恰恰相反,语法看起来比导出普通的旧 ES5 样式对象更冗长,当我们将 ES6+ 甜蜜带入混合时更是如此。
您的原始实用程序模块示例工作正常。问题出在导入中。
由于您只是导出一个默认对象,因此导入它的正确方法是
import Utils from './utils/utils';
没有括号,没有星号,只是导入的默认对象的名称,然后可以像var text = Utils.textFormat(...)
一样使用它。
不过,我们可以走得更远。通过摒弃整个"导出一个默认对象"的方法,我们可以充分利用模块系统的全部功能。
utils.js:
'use strict'
function textFormat(args) {
var s = args[0];
...
return s;
}
const someOtherUtility = str => str + ' works!';
export { textFormat, someOtherUtility };
现在导出的函数可以像这样使用
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.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;
}
}
// main file
import Utils from './utils/utils';
…
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
或
// 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>");
(后者更可取)
相关文章:
- Javascript,从静态函数中打印全局对象
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 对象方法中函数中的上下文
- Coffeescription类中的方法返回函数而不是字符串
- 使用静态函数返回新Promise
- JavaScript 将循环遍历数组的函数传递给使用 Switch 语句日期方法的函数
- JavaScript es6 从另一个类调用静态函数
- Node.js Mongoose静态函数未被调用
- 如何获取调用方法的函数的名称
- 方法,函数,这个在javascript中
- 类的方法 - 静态成员
- 构造函数中的方法与函数的原型属性之间的差异
- Javascript - 使用闭包递增静态函数变量模拟
- 异步 JavaScript 静态函数变量
- 方法与函数调用模式
- 如何在不影响原始函数的情况下扩展javascript中的静态函数(使用新名称)
- 我不明白在变量中声明方法或函数的概念
- 要使用链式方法的函数的param检查
- IE8:对象不;t支持此属性或方法(日期函数)
- 使用 ES6 静态函数时,我得到“没有这样的方法”