我已经编写了一些 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>