小编Spa*_*ner的帖子

方法链可以像 Javascript 中内置函数的实现方式一样实现吗?

我认为我在方法链接方面缺少一些东西。对我来说感觉不完整。

方法链的工作原理是让每个方法返回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)

关键点:

  1. 链中的每个方法Obj.addNumber(10, 20).multiplyNumber(10)都会返回this
  2. 链的最后一部分.result是返回 以外的值的部分this

这种方法的问题在于,它需要您附加一个属性/方法才能在末尾获取除 之外的值this

将其与 JavaScript 中的内置函数进行比较。

const str = "  SomE RandoM StRIng  "

console.log(str.toUpperCase()) // "  SOME RANDOM STRING  " …
Run Code Online (Sandbox Code Playgroud)

javascript method-chaining

7
推荐指数
1
解决办法
2344
查看次数

创建一个Javascript投票系统

这是我对投票系统的尝试。只有一个时,它会按预期工作。但是,当我尝试将投票系统的数量扩展到一个以上时,它无法按预期工作。问题在于投票系统依赖于upVoteand downVote状态。因此,当我增加投票系统的数量时,它们都依赖于相同的两个变量,而不是每个变量都有自己的upVotedownVote变量。我认为有两种方法可以解决我的问题。

  1. 创建一个数组所以每个投票系统都有自己upVotedownVote变量。

  2. 使用闭包。

我认为第一个太麻烦且不切实际,我不知道如何实现此解决方案。我尝试了第二个,但是无法正常工作。

我想不到更简单的了。我不一定要寻找使用闭包的解决方案。任何简单的原始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)

html javascript css

5
推荐指数
2
解决办法
722
查看次数

标签 统计

javascript ×2

css ×1

html ×1

method-chaining ×1