函数应该在 jQuery 的扩展内部,还是外部?
Should functions be inside jQuery's extend, or outside?
我正在编写我的第一个 jQuery 插件,但我不完全确定扩展声明 中 中应该包含哪些内容,不应该包含哪些内容。
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
或
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
function someFunc() {/*doSomethin'*/};
};
在您的第一种方法中,您最终污染了添加 someFunc()
的全局范围。第二种方法不行。
但是,这并不意味着第二种方法更好。如果您将第一个方法包含在一个闭包中,它基本上最终会成为完全相同的东西,并且归结为个人喜好。
在这里,使用第一种方法(在闭包中)可能会更好,这样如果你在一个 JS 文件中有多个 jQuery 扩展,它们可以共享这个基函数。
I'd use the first option because:
It doesn't have any negative side effects.
那就是你错了。如果您正在使用不同的库,您可能会冒着覆盖其他人的 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() 函数没有什么意义,因为通常是狗而不是浏览器会这样做 windows.
我正在编写我的第一个 jQuery 插件,但我不完全确定扩展声明 中 中应该包含哪些内容,不应该包含哪些内容。
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
或
$.fn.myplugin = function () {
var somevar = this;
someFunc(somevar);
function someFunc() {/*doSomethin'*/};
};
在您的第一种方法中,您最终污染了添加 someFunc()
的全局范围。第二种方法不行。
但是,这并不意味着第二种方法更好。如果您将第一个方法包含在一个闭包中,它基本上最终会成为完全相同的东西,并且归结为个人喜好。
在这里,使用第一种方法(在闭包中)可能会更好,这样如果你在一个 JS 文件中有多个 jQuery 扩展,它们可以共享这个基函数。
I'd use the first option because:
It doesn't have any negative side effects.
那就是你错了。如果您正在使用不同的库,您可能会冒着覆盖其他人的 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() 函数没有什么意义,因为通常是狗而不是浏览器会这样做 windows.