各种API中的Javascript链接语法?

时间:2014-11-13 06:06:34

标签: javascript

我想知道我在各种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。

1 个答案:

答案 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";
   }
}

有关对象文字的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Object_literals

句号用作对象访问器:

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

希望这有帮助!