Javascript中的回调真的是方法调用吗?如果是的话,他们是怎么回事'级联'
Are callbacks in Javascript really methods calls? If so how are they 'cascaded'?
例如,以Angular.js:中的代码为例
app.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'page/hello.html',
controller: 'mainCount'
})
.when('/pag', {
templateUrl: 'page/hello.html',
controller: 'secondCount'
})
});
所以$routeProvider
是一个对象,而.when
(回调)似乎是一个函数调用。如果是这样的话,上面的这两个方法调用是如何"一个在另一个之上"被调用的?
通常情况下,我预计会发生这种情况:
object.method().method()
第二个方法调用第一个方法返回的对象。显然,在上面的Angular示例中没有发生这种情况。这是怎么回事?
Javascript中的回调真的是方法调用吗?
也许吧。作为一个方法与作为一个回调是正交的。
方法调用是指调用附加到对象的函数。
回调是作为参数传递给另一个函数调用的函数。
接受回调的函数可能会将其附加到对象上,并在该上下文中调用它,但这不是必需的。
所以$routeProvider是一个对象,它看起来像.当(回调)
when
在此实例中不是回调。promise有一个名为when
的方法,它接受回调作为参数,但这里没有处理promise,也没有向when
传递函数。
.当(
回调)是函数调用时。
是的。when
的返回值是一个对象。该对象与调用第一个when
的对象相同,并且它仍然具有一个名为when
的属性,该属性的值是一个函数。
这是方法链接而不是回调。
这是怎么回事?
只是合理的返回值。看看这个简单的例子:
function Incrementor() {
this.value = 0;
}
Incrementor.prototype.up = function() {
this.value++;
return this;
}
var i = new Incrementor();
document.body.appendChild(
document.createTextNode(
i.up().up().up().value
)
);
$routeProvider
的.when
方法正在返回其this
以允许链接。对.when
的每次调用都会添加到存储的路由列表中。
$routeProvider = function $routeProvider() {
this.routeList = [];
};
$routeProvider.prototype.when = function when(string,object) {
this.routeList.push(string, object);
return this;
};
类似地,对于$q
承诺,.then
方法为$q
服务提供一个稍后调用的函数,$q
服务将该函数存储在其列表或"队列"中,但在这种情况下,它返回一个新的承诺。对.then
方法的每个连续调用都返回一个新的promise。
这是非常重要的一点。承诺不会返回自己的变异版本。他们用.then
方法返回新的承诺。缺乏这种理解一直是许多库开发人员的愚蠢行为。
- 如何使用PHP和JS级联三个下拉列表
- 对级联下拉列表使用不同的连接字符串
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- AngularJS或jquery中的依赖级联下拉框列表
- 文件结构:使用索引.js文件级联访问子模块或子文件
- 如何从一系列级联异步代码中返回值
- 是否可以将此javascript代码(或其中的一部分)移动到单独的文件中,而不是内联
- 他们是如何在这个页面上隐藏JavaScript的
- 我想创建4个级联下拉列表
- 带有角js的级联下拉列表
- Json级联下拉列表
- 如何级联jQuery Mobile组合框
- 在angular.js中创建级联dropbox
- JavaScript JTable-具有多个级联列表/下拉列表的Null值
- 级联和链接之间的区别是什么
- 级联下拉列表angularjs
- Javascript中的回调真的是方法调用吗?如果是的话,他们是怎么回事'级联'
- jQuery是级联的吗?如果没有,为什么不;我的代码不起作用
- HTML/CSS:我如何使右浮动到顶部,而不是浮动的位置,当他们是内联的
- 双向级联剑道下拉列表-这是可能的