【问题标题】:How does Chai JS make function parentheses optional?Chai JS 如何使函数括号可选?
【发布时间】:2016-05-11 06:06:18
【问题描述】:

我指的是测试断言库:http://chaijs.com/api/bdd/#false

您可以编写如下语言链断言:

expect(false).to.be.false;

expect() 显然是一个全局函数,“to.be”看起来像两个属性,但最后一部分“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

【问题讨论】:

  • 了解Object.defineProperty

标签: javascript function chai method-chaining


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2020-12-10
    • 2018-10-24
    • 2015-06-02
    • 2021-09-19
    相关资源
    最近更新 更多