我正在编写我的第一个jQuery插件,我不完全确定应该是什么 内 扩展声明和什么不应该。
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
要么
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
function someFunc() {/*doSomethin'*/};
};
我会使用第一个选项,因为:
它没有任何负面的副作用。
那就是你错了。如果您正在使用不同的库,则可能会覆盖某些elses someFunc(),可能会破坏他们为您做的任何事情。更安全的方法是在代码周围包装一个闭包。
(function(){
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
/* Do whatever other things you need someFunc/myplugin for */
})();
这样,someFunc就会被全局命名空间屏蔽掉。
或者,您可能要做的是将对象的方法暴露给外部世界。举几个例子:
$.fn.dog = function () {
this.bark = function() {alert("Woof");};
return this;
};
var $max = new $('#myDogMax').dog();
$max.bark();
这使函数保持在对象的上下文中,但可以从外部干净地访问它。虽然这通常意味着该方法以某种方式与对象相关。在全局范围内编写一个bark()函数是没有意义的,因为它通常是倾向于执行它而不是浏览器窗口的狗。
在您的第一种方法中,您最终会污染全局范围添加 someFunc()
。第二种方法没有。
但是,这并不意味着第二种方法更好。如果你将第一个方法括在一个闭包中,它基本上就是完全相同的东西,并归结为个人偏好。
在这里,使用第一个方法(在闭包中)甚至可能更好,因此如果在单个JS文件中有多个jQuery扩展,它们可以共享此基本函数。