我该如何创建类似这样的东西?

3

我的任务是创建这个: element()
element() 将会有像 shake() 这样的方法。

我认为我从没有方法的 element() 开始,使用了 function element() 来实现这个。

function element(theElement) { // element() has a parameter named toReturn, but theElement probably makes more sense
  return document.querySelectorAll(theElement);
}

接下来我开始研究方法。但首先,我必须删除该函数(就我所知)并将其替换为 class。我知道你需要使用类来处理诸如 element().method 的事情。

class element {
  constructor(theElement) {
    return document.querySelectorAll(theElement)
  }
}

带有方法的版本

class element {
  constructor(theElement) {
    param1 = theElement;
    return document.querySelectorAll(theElement);
  }
  ...
  static shake(shakeBy = 10) {
    ...
  }
  ...
}

但是,我遇到了另一个问题,并出现错误提示,指出类不能在没有 new 的情况下被调用。然后事情就变得非常奇怪:

var something = new element('.putis') // NANI?

所以,我决定让 element() 返回以下内容:[new element(param1), document.querySelectorAll(param1)]
这样做不仅可以调用类,而且new element()将返回document.querySelectorAll(param1)new element()new element()又会返回new element()new element()也会返回new element(),如此连续下去,返回树会变得越来越高,直到最终达到堆栈限制的那个点。返回树看起来像这样:

-------------------stack limit-----------------
    \          /
    ...      ...
      \      /
new element()  query selector
        \     /
 new element()   query selector
          \     /          
   new element()    query selector
           \         /
            element()
---the ground---------------------

所以我改用对象,并做了这个:

var element =
[
  function(a) {
    param1 = a;
    return document.querySelectorAll(a)
  },
  {
    // example method
    "print": function() {
      window.alert('Hello, my name is' + param1;)
    }
  }
]

但是我收到的错误信息是element()不是一个函数,虽然我认为element()是一个函数。显然它是一个数组,但这个数组应该让元素键的值同时返回两个内容。

我尝试过这些解决方案:

  this.direction = function() {
    letterIndex = 0;
    rotateProp = new String();
    do {
      rotateProp += elements.style.transform.charAt(letterIndex);
      ++letterIndex;
    }
    while (elements.style.transform.charAt(letterIndex) != '(');
  }

var element = (toReturn) => {
  ...
}

但是他们都失败了。

我该如何完成我的任务?

我知道我不应该使用类,因为我遇到了与类相关的问题,就像之前提到的一样:尝试调用类都会失败。

1个回答

2
你应该将document.querySelectorAll的结果分配给对象本身的属性,而不是返回它。此外,如果你希望这些方法在类的所有实例上创建,可以省略static关键字。
class element {
  constructor(theElement) {
    this.elements = document.querySelectorAll(theElement)
  }
  shake(shakeBy=10){
     //You can use this.elements here
   }
}

你为什么需要返回它呢?在这种情况下,你可以扩展NodeList的原型。 - Unmitigated

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接