2013-02-02 7 views
8

jQueryを使ってプラグインを書くのは比較的簡単です。ちょうど$ .fnを使用しています。同様に:jQueryを使わないでjavascriptプラグインを書くには

$.fn.analyse = function() { 
... 
} 

jQueryを使用できない場合はどうすればよいですか?私はそれが眉をひそめている理解して何からでも

Object.prototype.analyse = function() { 
... 
} 

document.querySelector("#mydiv").analyse(); 

が、私はこのようにそれについて行くことができます:

のは、私は次のコードを使用することができるようにしたいとしましょう!

var proto_methods = { 
    analyse: function() { 
     var node = this.node; 

     // ... 
    } 
}, wrap, _wrap; 

_wrap = function(selector) { this.node = document.querySelector(selector); }; 
_wrap.prototype = proto_methods; 

wrap = function(selector) { 
    return new _wrap(selector); 
}; 

はこのようにそれを使用します:

+1

次に、DOM要素を受け入れる関数を書くだけです。 –

+0

あなたの質問は何ですか?あなたは、jQueryを置き換えてそれを変更するオブジェクト型を作ることができます - あなたは私が推測する選択をするためにちょっとした配管が必要です。 – Hogan

+0

@Hogan遅くて申し訳ありません。問題は、 'Object.prototype.extension'に惑わされた場合、オブジェクトの機能を拡張するための好ましい方法は何ですか? –

答えて

26

はここであなたが始めるために何か

wrap("#mydiv").analyse(); 

使用あなたがより多くのプラグインを追加したい場合は、この(と、それはだ、もう少しオブジェクト指向):

var pack = { 
    binder: [{}] 
}; 

pack.query_bind = function(bound) { 
    if (bound) pack.binder[1] = bound; 
}; 

pack.fn = function(attributes) { 
    for (var i in attributes) pack.binder[0][i] = attributes[i]; 
}; 

var _wrap = function(selector) { 
    this.node = /^(#|.)\w+/.test(selector) ? pack.binder[1](selector) : {}; 
}; 

_wrap.prototype = pack.binder[0]; 

var wrap = function(selector) { 
    pack.query_bind(document.querySelector.bind(document)); 
    return new _wrap(selector); 
}; 

wrap.fn = pack.fn; 

wrap.fn({ 
    cool: function() {}, 
    nice: function() {} 
}); 

wrap('#mydiv').cool(); 

はいつでもwrap.fnを呼び出すことができますし、プロトタイプが更新されます。

ただし、このコードには含まれていないことがたくさんあるので、これはjQueryの真の置き換えではありません。 wrap関数は、多くの点でjQueryの$ほど高度で有用ではありません。

こちらがお役に立てば幸いです。

+1

ありがとう...このオプションを設定するには? –

+2

それぞれのセクションにコメントをして、なぜそれを行うのが好きなのか説明してください。今はちょうどコードをダンプし、関数を呼び出してインスタンスを作成します。非常に自明ではない – vsync

2

ボイラープレートを書きました。既に独自のセレクタエンジンを持っているD3.js上のライブラリ用に設計されているため、独自のセレクタロジックはありません。 https://gist.github.com/turboMaCk/34bde8e744f5921be0c4

関連する問題