在方法链中修改当前处理的值时,是否有任何方法可以在没有承诺或 类 的情况下访问它?

Is there any way to access currently processed value without promises or classes while it is being modified inside methods chain?

我有这个代码:

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 关键字无法在 .slice() 方法之前和 .toISOString() 方法之后指向 to/return 值。 或者也许可以,使用一些先进的技术,但我不知道它们。

那么有什么方法可以不使用 callbacks/promises 来达到我想要的效果吗? 我出于个人目的,出于好奇。

这目前是不可能的。

然而,有一个名为 pipeline operator 的 ECMAScript 提议试图解决这个问题。确切的语法目前尚未确定,该功能可能根本不会出现在该语言中。

您的示例可能如下所示(同样,这只是一个提议,实际上并没有用):

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

不过,这很难提高可读性。

可以 现在使用 ECMAScript 2015 中引入的 default parameters and arrow functions 来完成它,尽管它可能不完全具有您想要的功能。

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

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

console.log(y);

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