是否有什么东西不能用OO语言编写(支持闭包)使用延续传递方式?
你可以谷歌CPS的意思或者只是坚持功能/方法的定义永远不会返回任何东西,总是在某处推送数据 - 使用传递的回调。
从原始问题开始,我甚至可以回答自己 - 没有那样的。而且它实际上是非常好的OO原则,叫做告诉不要问
function getName(){
return this.name;
}
console.log(xyz.getName())
VS
function pushNameTo(callback){
callback(this.name);
}
xyz.pushNameTo(console.log)
很好,但这一次是以如何命名的,让它在它做什么之后命名并使其更加OO:
function renderOn(responseBuilder){
var b = responseBuilder;
//or just string, whatever, depending on your builder implementation
b.field("Name: ", this.name);
b.field("Age: ", this.age);
b.image("Profile photo", this.imageData);
}
person.renderOn(htmlBuilder);
这里的要点是 - 对象不仅包含其数据,还包括行为,精神,个性。 还有谁应该负责表达个人的陈述而非个人本身?
当然,这并不一定意味着您的代码中应该包含html,构建器可以实现此目的。它甚至可以为实际的UI渲染层生成一些xml或其他数据格式。但它总是推动而不是拉动。
答案 0 :(得分:3)
当然没什么。考虑一下:如果你有一个完全顺序的程序,你可以简单地将它插入某种包装器,如document.onload()。然后顺序程序将异步启动。
反过来说,如果你拥有的只是一种同步语言,你总是可以通过创建一个要执行的片段表来编写异步案例,以及一个内部循环,它看起来已经启用了什么,然后接受它从表中执行。事实上,这看起来非常像你的javascript运行的底层运行时。
答案 1 :(得分:0)
有两种类型的程序 - 命令式和功能性。
势在必行的计划是一步一步的。 C ++,Java等就是例子。
功能程序可能不是顺序的。大多数异步模式都使用“延续式”编程,这是一种具有强制性泛音的函数式编程。
JavaScript是一种具有一流功能的命令式语言,即它还支持某些函数式编程范例。
您在问题中描述的是“延续式”异步编程。请注意,“延续”的含义是“此行之后的其余程序”。因此,理论上,每个命令性程序都可以以“连续”方式重写(即,第一行继续从第二行开始的程序的其余部分,依此类推等等)。例如:
Statement #1
Statement #2
Statement #3
可以改写为:
do(Statement #1, function{
do(Statement #2, function{
Statement #3
})
})
其中do
的第二个参数是语句的延续。
虽然循环更棘手,但它们也可以类似地重写 - 基本上将循环体itsslef作为延续。