链函数:如何取消第一个函数的结果?

时间:2017-10-31 21:02:55

标签: javascript

我创建了一个构造函数_ (),并在原型中编写了几个方法,即“枚举”方法,覆盖了类或id HTML元素。

有一种方法需要引用NodeList的特定元素(例如itElement(2))。我使用链函数(_ ('.test'). item (2))。 使用addMiClass方法,我想将我的类添加到完全元素(2),但该类已添加到所有元素_ ('.test')

如何取消第一个函数(_ ('test'))的结果?

'use strict';

function _(arg) {

  if (!(this instanceof _)) {
    return new _(arg);
  }

  var self = this;
  //we can transmit a string
  if (typeof arg === "string") {
    this.elements = arg.split(',');
    this.element = [];
    for (var i = 0; i < this.elements.length; i++) {
      this.element.push(document.querySelectorAll(this.elements[i]));
    }
  }
  //if transmit object
  if (typeof arg === "object") {

    this.element = [];

    for (var i in arg) {
      //  var index = Object.keys(arg).indexOf(i);//for gettinf index
      this.element.push(document.querySelectorAll(arg[i]));
    }
  }
}

_.prototype = {

  //method for bust elements
  enumeration: function(elements, callback) {

    for (var i = 0; i < elements.length; i++) {

      [].forEach.call(elements[i], callback);

    }
    return this;
  },
  //method for adding class
  addMyClass: function(nameClass) {

    this.enumeration(this.element, function(el) {
      // do whatever
      el.classList.add(nameClass);
    });

    return this;
  },

  //for specific elements
  itElement: function(element) {
    element -= 1;
    for (var i = 0; i < this.element.length; i++) {

      [].forEach.call(this.element[i], function(el, i) {

        if (i === element) {
          return el;
        }

      });
    }

    return this;
  }

}

//////////////////use my object
_('.first').itElement(2).addMyClass('test');
<div class="first">ff</div>
<div class="first">ff</div>
<div class="first">ff</div>
<div class="second">ff2</div>
<div class="third">ff3</div>

1 个答案:

答案 0 :(得分:0)

你不能return this,你必须返回一个包含你想要的元素的新实例。 (顺便说一下,尝试从return回调中forEach是徒劳的。)