在方法链中修改时,有没有承诺或类的当前处理值的方法有没有?



我有这个代码:

var a = new Date();
var b = a.toISOString();
var c = b.slice(0, b.indexOf('.'));
var d = c.replace('T', ' ');
console.log('a:', a, 'nb:', b, 'nc:', c, 'nd:', d);

我想要实现的是,将所有四行合并为一行,不使用回调、类或承诺,只是纯粹的方法链接。 就像这样,即:new Date().toISOString().slice(0, *reference to ISO stringified date*.indexOf('.')).replace('T', ' ');

但问题是,this关键字无法在方法之前和.toISOString()方法之后指向/返回值.slice()。 或者也许可以使用一些先进的技术,但我不知道它们。

那么有没有办法在不使用回调/承诺的情况下实现我想要的? 出于好奇,我要求我的个人目的。

这目前是不可能的。

然而,有一个名为管道运算符的 ECMAScript 提案试图解决这个问题。确切的语法目前尚未确定,该功能可能根本不会进入语言。

您的示例可能如下所示(同样,这只是一个建议,实际上不起作用(:

var res = new Date().toISOString() |> (_ => _.slice(0, _.indexOf('.')).replace('T', ' '));

但是,这几乎不会提高可读性。

现在可以使用ECMAScript 2015 中引入的默认参数和箭头函数来执行此操作,尽管它可能不完全具有您想要的功能。

如果您想访问更多中间结果,语法可能看起来很混乱。

var y = ((d = new Date().toISOString()) => d.slice(0, d.indexOf('.')).replace('T',' '))(); 
console.log(y);

在这种特殊情况下,UTC 时间戳表示为本地时间戳,因此在该上下文中不是一个好主意。

相关内容

最新更新