我想知道我在各种javascript库中看到的各种链接样式是否有术语/概念/名称。我不认为自己是一个" javascript人员"所以我偶然发现了#34; chaining"语法相当多。
以下是一些例子:
// ember.js
this.resource('products', function() {
this.resource('foo', { path: '/:foo_id' }); // <-- semicolon
this.resource('bar', { path: '/:bar_id' }); // <-- semicolon
// additional things can go here as long as semicolons are above
});
// ember.js
songsController = Ember.ArrayController.create({
model: songs, // <-- comma
sortProperties: ['track'], // <-- comma
sortAscending: true // <-- additional things if you want, use commas
});
// jasmine
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}, // <-- comma
getBar: function() {
return bar; // <-- additional things if you want, use commas
}
};
// angular.js
$routeProvider.
when('/phones', {
// ...
}). // <-- period
when('/phones/:phoneId', {
// ...
}). // <-- period
// additional things can go here as long as periods are above
具体来说,似乎只是尾随字符令人困惑。你们是否知道API正在做什么,或者你只是寻找例子并记住/熟悉它?如果它是浏览javascript,当你看到Ember.ArrayController.create()采用逗号和大括号时,你会想到:
用逗号括号?这看起来像一个对象。我打赌.create()接受一个对象。
此链接/堆叠是否有名称?也许没有它的名字,它只是我不理解的Javascript。
答案 0 :(得分:2)
这些都不是针对任何框架的。您所看到的是本机JavaScript功能。
让我们来看看你的例子
this.resource('bar', { path: '/:bar_id' }); // <-- semicolon
这不是链接。分号用于表示javascript中语句的结尾。
songsController = Ember.ArrayController.create({
model: songs, // <-- comma
sortProperties: ['track'], // <-- comma
sortAscending: true // <-- additional things if you want, use commas
});
javascript中的对象文字{}
由properties
组成。使用逗号分隔的键值对定义属性:
var myObj = {
myKey : "myStringValue",
mySecondKey : "mySecondStringValue",
myFunctionKey : function() {
return "I am a function";
}
}
句号用作对象访问器:
var obj = {
myProp : myVal
};
console.log(obj.myProp); // myVal
现在你的最后一个例子实际上是函数链:
$routeProvider.
when('/phones', {
// ...
}). // <-- period
when('/phones/:phoneId', {
// ...
});
当函数返回对它的父对象或包含函数的另一个对象的引用时,会发生这种情况:
var obj = {
funcOne : function() {
return this;
},
funcTwo : function() {
return this;
},
funcThree : function() {
return "NO more Chaining FOr YOU!";
}
}
obj.funcOne().funcTwo().funcThree(); // "NO more Chaining FOr YOU!"
obj.funcOne().funcTwo().funcThree().funcFour(); // throws an error - a string cannot contain a function
希望这有帮助!