2016-11-10 5 views
0

、私はこれは私が経験マリオネットのアプリを開発するが、コード上でいる

define(['jquery', 'components/BaseComponent', 'bootstrap'], function(
    $, BaseComponent, bootstrap 
) { 
    'use strict'; 

    return BaseComponent.extend({ 

     initialize: function(options) { 

      BaseComponent.prototype.initialize.call(this, options); // what is this man? 
      this.widgetOptions = $.extend({}, options); // what is this man? 

      return this; // what is this man? 
     }, 

     render: function() { 

      BaseComponent.prototype.render.call(this); //again? 


      return this; //again? 
     } 
    }); 
}); 

はまだ私を混同しないものと困惑しています。ドキュメンテーションもこれをやった人も残っていません。

+0

これらのすべては、基本的なJavaScriptのパターンです。それは他のライブラリとはまったく無関係です。 –

+0

実際、多くのプログラミング言語では、連鎖としてのJavaScriptにのみ限定されるものではありません。 –

答えて

2

継承と

まず、いくつかの情報親関数を呼び出す:OOPconcepts

  • Inheritance
  • OOP in javascript
  • Inheritance with Backbone
  • 01に

    • 紹介
      BaseComponent.prototype.initialize.call(this, options); // what is this man? 
      
      • BaseComponentBackbone's extend helper functionを持つコンストラクタ関数(understanding javascript constructors)、です。このヘルパー関数は、prototypal inheritanceの複雑さのいくつかをラップします。

      • BaseComponent.prototypeは、関数とプロパティを含む親クラスのプロトタイプです。

      • BaseComponent.prototype.initialize我々はこのモジュールの新しいinitializeを定義することによって上書きされている親クラス(BaseComponent)の関数です。

      「クラス」の機能は、prototype propertyの内部に含まれています。親のプロトタイプの関数に.call functionを使用することで、現在のオブジェクトのコンテキストで関数を呼び出すことができます。これはoptionsのプロパティがコピーされている新しいオブジェクトを、作っているオブジェクト

      this.widgetOptions = $.extend({}, options); // what is this man? 
      

      のコピーを作成

      。これはjQuery's extendを使用しており、浅いコピーを作成します。

      ので、これは良いパターンです:それはあなたが安全で再利用することができた(受信optionsオブジェクトに影響を与えずにプロパティを変更することができますので、それはコピーだ

    • this.widgetOptionsがオブジェクトであることを保証し

      1. 呼び出しコード)。機能の連鎖

      これはchain function callsになっ

      return this; // what is this man? 
      

      を呼び出して、次のように:render関数の内部

      myView.render().lookImChaining().functionCalls(); 
      

      、それはバックボーン標準です。しかし、初期化では、実際には手動で初期化を呼び出すことはないので意味がありません。 Backbone's docから

      良い大会は チェーンの通話を可能にするために、レンダリングの最後にこれを返すことです。

      default view render

      render: function() { 
          return this; 
      }, 
      
    +0

    オーバーライドは何を意味しますか? 'BaseComponent'で利用できるメソッドを使用できますか?プロトタイプはどうやってここに出てくるの?なぜ 'BaseComponent.initialize.call()'だけではないのですか? –

    +0

    overidingは、BaseComponentにinitializeという名前のメソッドがあり、投稿されたコードにも同じ名前のメソッドがあり、BaseComponentから継承しているため、コードがBaseComponentのinitializeメソッドをオーバーライドすることを意味します。 BaseComponent.prototype.initialize.call(この、オプション)からそのプロトタイプの単語を削除してみてください。initializeはそれ自身を呼び出し続けるので、最大のcallstack size reacheエラーが発生します。 –

    +0

    @JessJordan私は追加情報へのリンクをたくさん追加しました。 –

    関連する問題