他の場所で使用できるように、クロージャにカプセル化するJavaScriptをいくつか作成しました。jQueryが行ったのと同じようにこれを行いたいと思います。いくつかのオプションを設定しながら、クロージャーにIDを渡して、クロージャーでいくつかの関数を呼び出せるようにしたいと思います。これに似ています:
<script type="text/javascript">
_snr("#canvas").draw({
imageSrc : someImage.png
});
</script>
これを行うためにクロージャーを使用する方法について多くの異なる投稿を読みましたが、それでも概念に苦労しています。これが私が中断したところです:
_snr = {};
(function (_snr) {
function merge(root){
for ( var i = 1; i < arguments.length; i++ )
for ( var key in arguments[i] )
root[key] = arguments[i][key];
return root;
}
_snr.draw = function (options) {
var defaults = {
canvasId : 'canvas',
imageSrc : 'images/someimage.png'
}
var options = merge(defaults, options)
return this.each(function() {
//More functions here
});
};
_snr.erase = function () {};
})(_snr);
上記の最初のコードセクションのように描画関数を呼び出そうとすると、「_snrは関数ではありません」というエラーが発生します。ここでどこが間違っているのですか?
編集 これが私がやったことです:
function _snr(id) {
// About object is returned if there is no 'id' parameter
var about = {
Version: 0.2,
Author: "ferics2",
Created: "Summer 2011",
Updated: "3 September 2012"
};
if (id) {
if (window === this) {
return new _snr(id);
}
this.e = document.getElementById(id);
return this;
} else {
// No 'id' parameter was given, return the 'about' object
return about;
}
};
_snr.prototype = (function(){
var merge = function(root) {
for ( var i = 1; i < arguments.length; i++) {
for ( var key in arguments[i] ) {
root[key] = arguments[i][key];
}
}
return root;
};
return {
draw: function(options) {
var defaults = {
canvasId : 'canvas',
imageSrc : 'images/someimage.png'
};
options = merge(defaults, options);
return this;
},
erase: function() {
return this;
}
};
})();
私は今呼び出すことができます:
<script type="text/javascript">
_snr("#canvas").draw({
imageSrc : someImage.png
});
</script>