【问题标题】:How to enable chaining in custom functions [duplicate]如何在自定义函数中启用链接[重复]
【发布时间】:2017-04-26 21:57:59
【问题描述】:

我正在用 JavaScript 创建自己的库。我已经制作了一些基本功能,例如.css().text() 等。它适用于我,但是当我在一个元素中添加这两种方法时,它只应用第一种方法而忽略第二种方法。

例如:

__('p').text('Hello World').css({'color':'red'});

只有hello world会生效,.css()不会生效。
这是我的代码:

function __(selector) {
    var _kean = {};

    _kean.selector = selector;

    if (typeof selector == 'object' || typeof selector == 'undefined') {
        _kean.element = [_kean.selector];
    } else if (typeof selector == 'string') {
        _kean.element = document.querySelectorAll(_kean.selector);
    } else if (selector instanceof HTMLElement) {
        _kean.element = [selector];
    } else {
        _kean.element = document.querySelectorAll(_kean.selector);
    }

    _kean.text = function(elems) {
        return [].slice.call(_kean.element).map(function(el, i) {
            if(!elems) return el.textContent;
                      return el.textContent = elems;
        });
        return _kean;
    }

    _kean.css = function(propval) {
        _kean.element.forEach(function(elements) {
            Object.assign(elements.style, propval);
        });
         return _kean;
    }

 return _kean;
}

【问题讨论】:

  • "并忽略第二个" - 如果您检查浏览器的控制台,我想您会发现它与其说是“忽略”,不如说是“崩溃”。无论如何,在你的.text() 函数之后链接任何东西是没有意义的,因为显示的文本函数返回一个文本数组..
  • 不工作先生
  • return _kean; 应该这样做。阅读链接的重复问题,也许还有一些与该问题相关的其他问题。
  • 嘿,我记得那个代码!好吧,您需要考虑每个函数需要返回什么。链接时,您需要返回包含要在链中调用的所有函数的对象。那是_kean。可能需要将一些结果作为属性分配给该对象,而不是返回它们,因为这些结果(例如数组)没有您想要链接的函数。
  • 还是不行,先生:(

标签: javascript jquery


【解决方案1】:

JQuery 中的大多数 API 都是方法的原因是它们可以返回原始对象,以便您链接另一个方法。要自己启用此功能,您需要您的方法返回他们正在使用的 JQuery 包装集。然后,返回的对象将支持在其上调用另一个方法。

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多