Javascript 干燥:使所有功能“干燥”;把这个退回来;

Javascript 干燥:使所有功能“干燥”;把这个退回来;,javascript,prototype,Javascript,Prototype,我正在试验一些代码来创建自己的DOM方法,但没有扩展实际的DOM,类似于jQuery的工作方式。这是我目前的原型: function Lib( selector ) { this.el = this._query( selector ); } Lib.prototype = { _query: document.querySelectorAll.bind( document ), _each: function( fn ) { return [].forEach.call(

我正在试验一些代码来创建自己的DOM方法,但没有扩展实际的DOM,类似于jQuery的工作方式。这是我目前的原型:

function Lib( selector ) {
  this.el = this._query( selector );
}

Lib.prototype = {
  _query: document.querySelectorAll.bind( document ),
  _each: function( fn ) {
    return [].forEach.call( this.el, fn );
  },
  hide: function() {
    this._each(function( el ) {
      el.style.display = 'none';
    });
    return this;
  },
  show: function() {
    this._each(function( el ) {
      el.style.display = 'block';
    });
    return this;
  },
  toggle: function() {
    this._each(function( el ) {
      var hidden = el.style.display == 'none';
      el.style.display = hidden ? 'block' : 'none';
    });
    return this;
  }
};

function $( selector ) {
  return new Lib( selector );
}

$('div').toggle();
如您所见,我必须不断返回
this
,才能链接方法。我的大脑现在已经死了,我想不出一个方法来自动化这个。有什么建议吗?

不要“自动”返回语句。这是一种控制逻辑,很像if-else(仅在功能级别上)

如果您想真正“自动化”它,那么您基本上需要一个JavaScript代码生成器,与CoffeeScript等不同。

不要“自动化”返回语句。这是一种控制逻辑,很像if-else(仅在功能级别上)


如果您想真正“自动化”它,那么您基本上需要一个JavaScript代码生成器,与CoffeeScript等不同。

您必须从每个方法调用中返回“this”以实现链接性


或者,您可以通过应用或调用并在“this”上下文中执行回调函数来完成类似的操作。

您必须从每个方法调用返回“this”以实现链接性


或者,您可以通过应用或调用并在“this”上下文中执行回调函数来完成类似的操作。

。。。我看不出自动化的真正好处

考虑到每个方法只定义了一个要在其中运行的函数,我会攻击它,因为它可能会回答您的实际问题。函数生成器为每个获取函数,并以名称将生成的函数添加到原型中,可能会解决这两个问题


尽管我不确定具体的实施情况。

。。。我看不出自动化的真正好处

考虑到每个方法只定义了一个要在其中运行的函数,我会攻击它,因为它可能会回答您的实际问题。函数生成器为每个获取函数,并以名称将生成的函数添加到原型中,可能会解决这两个问题



尽管我不确定实现。

我认为如果没有一些干扰,比如代码,通过将函数转换为文本(源代码)然后再转换回来,您就无法做得更好。。。。我看不出自动化的真正好处。考虑到每个方法只定义了一个要在
\u每个
中运行的函数,我会攻击它,因为它可能会回答您的实际问题。@Pointy:这是我尝试过的,但似乎不是一个好主意,dunno…@Dave:对我来说似乎是一个足够好的答案:)@elclanrs这样做是一件冒险的事情,因为在一般情况下,你需要一个完整的解析器和静态分析器来确保你的代码更改正常工作。我认为如果没有像代码这样的干扰,你不可能做得更好,比如通过将它们转换为文本来重新处理函数(源代码)再说一遍……我看不出自动化这有什么真正的好处。考虑到每个方法只定义一个要在
\u每个
中运行的函数,我会攻击它,因为它可能会回答你的实际问题。@Pointy:这是我尝试过的一些回避,但似乎不是一个好主意,dunno…@Dave:对我来说似乎是一个足够好的答案:)@elclars这样做是有风险的,因为在一般情况下,您需要一个全面的解析器和静态分析器来确保您的代码更改正常工作。从
返回
这个
,然后返回这个
。\u每个函数中的每个(…)
就足够了(除非您还想停止使用
\u each
).OMG@FelixKling!谢谢,成功了!刚刚放了个脑屁。现在看起来已经够干了。@elclars我也想过了,但最终假设它是按预期实现的——我可能有两个版本的
\u每个
,以防您需要返回其他内容,但不知道您的用例,谁知道呢:)是的,听起来是个好主意。我的下一步是尝试摆脱
el
,并能够像在jQuery中一样使用
这个
。我猜一些
到处应用
,或者另一个嵌套函数可以获取参数…从
返回
这个
,然后
返回这个。每个函数中的每个(…)
都已经足够了(除非你还想停止使用
\u each
)。OMG@FelixKling!谢谢,成功了!刚刚放了个脑屁。现在看起来已经够枯燥了。@Elclandrs我也考虑过了,但最终假设它是按预期实现的——我可能有两个版本的
\u,每个版本都有
,以防您需要返回其他内容,但不知道您的用例,谁知道呢:)是的,这听起来是个好主意。我的下一步是尝试摆脱
el
,并能够像在jQuery中一样使用
这个
。我猜一些
在这里和那里应用
,或者可能是另一个获取参数的嵌套函数。。。