我正在编写我的第一个jQuery插件,而且我不完全确定内部扩展声明应该是什么,
。$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
OR
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
function someFunc() {/*doSomethin'*/};
};
答案 0 :(得分:9)
我会使用第一个选项,因为:
它没有任何负面影响。
那就是你错了。如果您正在使用不同的库,您可能会覆盖别人的某些功能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()函数是没有意义的,因为它通常是狗,而不是浏览器窗口。
答案 1 :(得分:5)
在您的第一种方法中,您最终会污染添加someFunc()
的全局范围。第二种方法没有。
然而,这并不意味着第二种方法更好。如果你将第一个方法括在一个闭包中,它基本上就是完全相同的东西,并归结为个人偏好 在这里,使用第一个方法(在闭包中)可能更好,因此如果在单个JS文件中有多个jQuery扩展,它们可以共享此基本函数。