链接具有副作用的成员变量,链不以函数结尾
Chaining member variables with side-effect with the chain not ending in a function
在 JavaScript chaijs 测试库中,可以像这样链接成员:
pm.expect (entry.NAME).to.be.a('string').that.is.not.empty;
这个问题不是关于测试库的,而是关于库的内部技术的。我知道它是这样工作的: pm.expect
是一个函数 returns 一个至少包含 { to: { be: { a } } }
的对象 其中 a
是另一个至少 returns 的函数{ that: { is: { not: { empty } } } }
.
有趣的是 empty
显然不是函数。如果是,我将不得不这样称呼它:that.is.not.empty()
(注意括号)。所以链以一个不是函数的成员变量结束。
如何在 JavaScript 中使用该成员变量来产生副作用?你能给我看一个最小的 JS 片段,它允许我用不是函数调用的东西结束表达式(比如 empty;
)并且仍然表现得像函数调用吗?
function expect(value) {
return {
get empty() { return !value.length; },
};
}
expect("test").empty // false
expect("").empty // true
这是用 getter, have a look at the ChaiJS sourcecode 完成的。
Can you show me a minimal JS snippet that allows me to end an expression with something that is not a function call (like empty;) and still act like it was a function call?
当然可以。一种方法是使用 getter:
const person = (name) => ({
get greet() { return `Hello ${name}!`; },
get dismiss() { return `Goodbye ${name}!`; }
});
console.log( person("Tyler").greet );
console.log( person("John").dismiss );
在 JavaScript chaijs 测试库中,可以像这样链接成员:
pm.expect (entry.NAME).to.be.a('string').that.is.not.empty;
这个问题不是关于测试库的,而是关于库的内部技术的。我知道它是这样工作的: pm.expect
是一个函数 returns 一个至少包含 { to: { be: { a } } }
的对象 其中 a
是另一个至少 returns 的函数{ that: { is: { not: { empty } } } }
.
有趣的是 empty
显然不是函数。如果是,我将不得不这样称呼它:that.is.not.empty()
(注意括号)。所以链以一个不是函数的成员变量结束。
如何在 JavaScript 中使用该成员变量来产生副作用?你能给我看一个最小的 JS 片段,它允许我用不是函数调用的东西结束表达式(比如 empty;
)并且仍然表现得像函数调用吗?
function expect(value) {
return {
get empty() { return !value.length; },
};
}
expect("test").empty // false
expect("").empty // true
这是用 getter, have a look at the ChaiJS sourcecode 完成的。
Can you show me a minimal JS snippet that allows me to end an expression with something that is not a function call (like empty;) and still act like it was a function call?
当然可以。一种方法是使用 getter:
const person = (name) => ({
get greet() { return `Hello ${name}!`; },
get dismiss() { return `Goodbye ${name}!`; }
});
console.log( person("Tyler").greet );
console.log( person("John").dismiss );