在方法链中修改当前处理的值时,是否有任何方法可以在没有承诺或 类 的情况下访问它?
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 时间戳表示为本地时间戳,因此在这种情况下不是一个好主意。
我有这个代码:
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 时间戳表示为本地时间戳,因此在这种情况下不是一个好主意。