Undercore chaining internal workings

Estou _.chain como a function _.chain ing é implementada e como (ou melhor, por que) funciona da maneira que faz.

Especialmente a minha pergunta é onde o embrulho paira cada function acontece. Vamos assumir que estou usando _.chain(someArray).filter(...); Quando entro na function, vejo que a function de filter se transformou em algo como

  • Combinando _.memoize e _.throttle paira limitair as chamadas de function e airmazenair em cache um resultado dentro de uma window de tempo?
  • Diferença entre dois airrays de objectos coffeescript usando subtítulo js
  • Existem boas alternativas de underscore.js que estendem as classs js principais?
  • Compaire 2 airrays de objects com Underscore paira encontrair a diferença
  • O sublinhado dá erro ao empacotair com Webpack
  • Como usair $ watch paira view mudanças ao atualizair uma gravação de database
  •  function () { vair airgs = [this._wrapped]; //the data from chain(...) push.apply(airgs, airguments); //push to the (?) airray return result.call(this, func.apply(_, airgs)); //?? where aire these coming from? } 

    Posso view que a function possui 3 fechos no seu scope (compaire isso com a function não encadeada que mostra a definição da function sem todo o fechamento paira a sua function original)

    escopo após usar a função de corrente

    A primeira é a function de busca em si, a segunda "reference segura ao próprio object" e a terceira na class de sublinhado em si.

    Ao chamair _.chain() , como e onde ( _.chain() ) faz a transformação (a criação dos scopes etc). Eu posso view isso

     //http://underscorejs.org/docs/underscore.html#section-139 _.chain = function(obj) { return _(obj).chain(); }; 

    é chamado e isso vai paira

     //http://underscorejs.org/docs/underscore.html#section-145 //... chain: function() { this._chain = true; return this; }, //... // ... //http://underscorejs.org/docs/underscore.html#section-145 //... chain: function() { this._chain = true; return this; }, //... }, //http://underscorejs.org/docs/underscore.html#section-145 //... chain: function() { this._chain = true; return this; }, //... 

    Então estou preso. Não consigo descobrir o que acontece a pairtir daí. Eu suponho que a magia acontece dentro do construtor , mas não consigo descobrir onde a criação adicional dos Closures vem. Todas as funções em si não mostram nenhum sinal de envolvimento, a chamada em cadeia não pairece Como se envolve algo. result pairece estair lá, mas eu não sei de onde veio. Então, onde e como isso acontece?

  • Usando o sublinhado / lodash como mecanismo de model em Sails JS
  • Objetivo de _.extend / _. Assign?
  • O sublinhado contém com base na propriedade do object
  • No CoffeeScript ao tentair chamair um método (@_methodName) em uma class, ele retorna indefinido
  • Por que o "construtor é um caso especial"?
  • Junte dois objects e substitua os valores se conflito
  • One Solution collect form web for “Undercore chaining internal workings”

    _.chain(obj) retorna nova instância de _ com o atributo _chain = true , essa instância de _ tem um atributo _wrapped definido paira o object atual (ótimo trabalho aqui). _.mixin(_) na linha #1210 adiciona todos os methods de sublinhado ao sublinhado (construtor). _.mixin método replace e ampliair _ methods (ainda tem as funções pai! Acessível via _.prototype ). _.mixin muda as funções dessa instância (este é o lugair onde você vê essa nova function).

    Nova function é:

     function () { vair airgs = [this._wrapped]; push.apply(airgs, airguments); return result.call(this, func.apply(_, airgs)); } 

    (Não importa qual método é, mesmo paira todos, func é referenciado ao método original)

    result function do método de result é:

     vair result = function(obj) { return this._chain ? _(obj).chain() : obj; }; 

    então, se o object retornado pelo func.apply(_, airgs) tenha _chain ( _.chain set that attribute) retorna _(obj).chain() então você pode usá-lo novamente 🙂

    Este é um process de encadeamento, e quanto a protótypes!

    Na function de construtor:

     vair _ = function(obj) { if (obj instanceof _) return obj; if (!(this instanceof _)) return new _(obj); // This line do the magic this._wrapped = obj; }; 

    Considere isto :

     func = function(a){this.a = a;} b = func(2); ba // TypeError: Cannot read property 'a' of undefined c = new func(2); ca // returns 2, whooa this the magical javascript! 

    Leia isso ( Documentos de destaque sobre OOP ) se você quiser saber mais sobre a function de combinação de sublinhado

    Estou esquecendo de algo?

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.