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