2016-05-10 6 views
8

私はテストアサーションライブラリを参照しています:http://chaijs.com/api/bdd/#falseChai JSはどのように関数括弧をオプションにしますか?

あなたは、次のような言語のチェーンアサーションを書くことができます。

expect(false).to.be.false; 

(期待)が明らかにグローバル関数である、「to.beは」のようになります。 2つのプロパティがありますが、最後の部分はどのように "false"になりますか?私はそれが関数呼び出しでなければならないであろうことを期待してい:

expect(false).to.be.false(); 

は、この2015 ESの構文ですか?私はhttps://github.com/lukehoban/es6features

にそれへの参照を見つけることができないようスタックオーバーフローは、そのことはできませんと言う:How to implement optional parentheses during function call? (function overloading)

は、誰もがこのような何かを実装する方法についていくつかの光を当てることができますか?

ソースコード:https://github.com/chaijs/chai/blob/master/lib/chai/core/assertions.js#L281

+2

'Object.defineProperty'について学ぶ – SLaks

答えて

11

あなたはObject.definePropertyで、この(および他の多くのもの)を行うことができます。ここでは基本的な例です:

// our "constructor" takes some value we want to test 
var Test = function (value) { 
    // create our object 
    var testObj = {}; 

    // give it a property called "false" 
    Object.defineProperty(testObj, 'false', { 
     // the "get" function decides what is returned 
     // when the `false` property is retrieved 
     get: function() { 
      return !value; 
     } 
    }); 
    // return our object 
    return testObj; 
}; 

var f1 = Test(false); 
console.log(f1.false); // true 
var f2 = Test("other"); 
console.log(f2.false); // false 

あなたがObject.definePropertyで行うことができ、よりたくさんあります。詳細はthe MDN docs for Object.definePropertyをご覧ください。

関連する問題