如何使Javascript calss/构造函数可在HTMLCollection或元素上调用

如何使Javascript calss/构造函数可在HTMLCollection或元素上调用,javascript,Javascript,我有一个名为slider的JS构造函数/类 我想能够做的是调用slider作为HTMLCollection或元素的函数 我想打电话,比如 document.getElementsByClassName('my-class').slider() 我该怎么做?无法通过谷歌搜索出来,可能是因为我不知道这种类型的实现的术语 HTMLCollection.prototype.slider = function() { //... } 这被称为“扩展本机原型”,通常是一种不好的做法。你真的需要吗

我有一个名为slider的JS构造函数/类

我想能够做的是调用slider作为HTMLCollection或元素的函数

我想打电话,比如

document.getElementsByClassName('my-class').slider()

我该怎么做?无法通过谷歌搜索出来,可能是因为我不知道这种类型的实现的术语

 HTMLCollection.prototype.slider = function() {
   //...
 }
这被称为“扩展本机原型”,通常是一种不好的做法。你真的需要吗?为什么不只是:

function slider(nodes) { /*...*/ }

slider(document.getElementsByClassName("whatever"));
或者只是:

function slider(selector) {
  const nodes = document.querySelectorAll(selector);
  //...
}

slider(".someclass");
这被称为“扩展本机原型”,通常是一种不好的做法。你真的需要吗?为什么不只是:

function slider(nodes) { /*...*/ }

slider(document.getElementsByClassName("whatever"));
或者只是:

function slider(selector) {
  const nodes = document.querySelectorAll(selector);
  //...
}

slider(".someclass");

这听起来像-你到底想实现什么?@vlaz我想开发一个类似于slick slider的JS插件:你可以通过
new
ing构造函数来创建一个实例,但是你不能将类/构造函数直接放在元素(集合)上。无论如何,你绝对不应该这么做。将元素(集合)作为参数传递给构造函数。这听起来像-你到底想实现什么?@vlaz我想开发一个类似于slick slider的JS插件:你可以通过
new
ing构造函数来创建一个实例,但是你不能将类/构造函数直接放在元素上(集合)。无论如何,你绝对不应该这样做。将元素(集合)作为参数传递给构造函数。请注意,在不检查属性是否已定义的情况下扩展原型是一个非常好的主意。@hack4mer“popular”!=“编写得很好”@hack4mer糟糕的程序员?他们不调用
元素。slick()
,而是调用
$(element).slick()
-
$()
将元素包装在jQuery对象中。jQuery本身支持库将自己挂接到它并添加自定义内容,如
.slick()
在本例中。-您还可以看到slick的功能-这是GitHub上的
slick.js
中的最后一件事。基本上,您独立创建库,然后向
$.fn
添加一个新函数-例如,
$.fn.myLibrary=/*…*/
注意,扩展原型非常好,而不检查属性是否已经定义。@hack4mer“popular”!=“well writed”@hack4mer bad programmers?他们不调用
element.slick()
,他们调用
$(element.slick()
)-
$()
将元素包装在jQuery对象中。jQuery本身支持库将自己挂钩到它并添加自定义内容,如
.slick()
在本例中。-您还可以看到slick的功能-这是GitHub上的
slick.js
中的最后一个功能。基本上,您独立创建库,然后向
$.fn
添加一个新函数-例如,
$.fn.myLibrary=/*…*/