2017-07-03 9 views
1

これは単なる練習です。私はこのmaterial単純なjsフレームワーク、DOM。 (モジュールスタイル、jQueryスタイルのようにしようとする)

(function(window) { 
    function smp(selector) { 
    return new smpObj(selector); 
    } 

    function smpObj(selector) { 
     this.length = 0; 
     if (!selector) { 
      this.el = []; 
      return this; 
      } 
     if (selector.nodeType) { 
      this.el = selector; 
      this.length = 1; 
      return this; 
     } else if(selector[0]==='#'){ 
      this.el = document.getElementById(selector.slice(1, selector.length)); 
      this.length = 1; 
      return this; 
     } else if(selector[0]==='.'){ 
      this.el = document.getElementsByClassName(selector.slice(1, selector.length)); 
      this.lenghth=this.el.length 
      return this; 
     } 
     else return null; 
    } 
})(window); 

を使用して、このようなスクリプトを書いているこの問題を解決するには それから私はこのよう呼び出そう:

smp('body'); 

が、ブラウザが私のSMPの定義を見つけることができません。将来的には
私は(例えば、色を変更する)このようにそれを使用するには、いくつかのメソッドを追加したい:

smp('.myClass').method('attr') 

誰かが私に私のミスを示すことができる場合、私は、感謝します。

UPD:

(function color(smp) { 
    window.smp.prototype.changeColor = function() { 
     for (var i = 0; i < this.length; i++) 
      this.el[i].style.color = color; 
     return this; 
    }; 
})(smp); 
+0

は 'selector'が文字列である...文字列は'何のプロパティを持っていないnodeType'実際にはこれがjQueryを含むほとんどのライブラリは、何をすべきかです – charlietfl

答えて

1

あなたはそれを説明するためにリンク先の記事でModule Exportセクション:私はこのように試してみた

smp('.myClass').method('attr') 

: はまだのようなメソッドを追加することで、いくつかの問題を抱えています。

関数を実際に使用するには、変数をグローバル変数またはローカル変数に割り当てる必要があります。あなたはそれをローカルで言うことができます:

var smp = (...)(window) 

しかし、それはあなたの関数で何かを返す必要があることを意味します。別のファイルにこれをしたい場合は、最後に

var smp = (function(window) { 

    function smpSelector(selector) { 
     // ... snip 
    } 

    function smpObj(selector) { 
     // ... snip 
    } 

    return smpSelector; 

})(window); 

を、まだsmpへのアクセス権を持っている:})(window)smp機能

return smpSelector 

を返す前に、あなたのコードの末尾になるよう一緒にすべてを置きますそれをグローバルに割り当てることができます。私たちが行うことができます別のファイルから今

(function(window) { 

    function smpSelector(selector) { 
     // ... snip 
    } 

    function smpObj(selector) { 
     // ... snip 
    } 

    window.smp = smpSelector 

})(window); 

<script src="/path/to/smp/file"></script> 
var foo = smp('something') 
+0

ご理解いただきありがとうございます。 今すぐお試しください。 – bordus

+1

うわー、あなたは、特に最新の編集を助けてくれました(私が最初に目指していたこと)。 私は今理解していると思う、 本当に感謝します。 – bordus

+0

私の友人をコーディングし続ける! – shotor

関連する問題