我认为我在方法链接方面缺少一些东西。对我来说感觉不完整。
方法链的工作原理是让每个方法返回this,以便可以调用该对象上的另一个方法。然而,返回值是this函数的结果而不是函数的结果这一事实对我来说似乎很不方便。
这是一个简单的例子。
const Obj = {
result: 0,
addNumber: function (a, b) {
this.result = a + b;
return this;
},
multiplyNumber: function (a) {
this.result = this.result * a;
return this;
},
}
const operation = Obj.addNumber(10, 20).multiplyNumber(10).result
console.log(operation)
Run Code Online (Sandbox Code Playgroud)
关键点:
Obj.addNumber(10, 20).multiplyNumber(10)都会返回this。.result是返回 以外的值的部分this。这种方法的问题在于,它需要您附加一个属性/方法才能在末尾获取除 之外的值this。
将其与 JavaScript 中的内置函数进行比较。
const str = " SomE RandoM StRIng "
console.log(str.toUpperCase()) // " SOME RANDOM STRING " …Run Code Online (Sandbox Code Playgroud) 这是我对投票系统的尝试。只有一个时,它会按预期工作。但是,当我尝试将投票系统的数量扩展到一个以上时,它无法按预期工作。问题在于投票系统依赖于upVoteand downVote状态。因此,当我增加投票系统的数量时,它们都依赖于相同的两个变量,而不是每个变量都有自己的upVote和downVote变量。我认为有两种方法可以解决我的问题。
创建一个数组所以每个投票系统都有自己upVote和downVote变量。
使用闭包。
我认为第一个太麻烦且不切实际,我不知道如何实现此解决方案。我尝试了第二个,但是无法正常工作。
我想不到更简单的了。我不一定要寻找使用闭包的解决方案。任何简单的原始Javascript解决方案都可以。
工作代码:
const up_vote_span = document.querySelector('.up-vote');
const down_vote_span = document.querySelector('.down-vote');
let count = document.querySelector('.number');
let upVote = false;
let downVote = false;
up_vote_span.addEventListener('click', function() {
if (downVote === true) {
up_vote_span.style.color = "#3CBC8D";
down_vote_span.style.color = "dimgray";
count.innerHTML = parseInt(count.innerHTML) + 2;
upVote = true;
downVote = false;
} else if (upVote === false) {
up_vote_span.style.color = "#3CBC8D";
count.innerHTML = parseInt(count.innerHTML) + 1; …Run Code Online (Sandbox Code Playgroud)