使用“this"jQuery插件的内部命名函数
Using "this" inside named function on a jQuery plugin
我想写一个简单的jQuery插件,我需要一些代码来运行加载和窗口调整大小,所以我在插件内写了一个函数。
jQuery(文档)时函数($){
(function( $ ) {
$.fn.responsiveNav = function() {
function enable_responsive_nav() {
if( this.hasClass('class') ) {
//do stuff
}
}
$(window).resize(function(e) {
enable_responsive_nav();
});
enable_responsive_nav();
return this;
};
}( jQuery ));
$('nav').responsiveNav();
问题是'this'似乎在函数内部没有被识别。我尝试将其作为函数参数传递:
enable_responsive_nav( this )
…但我在控制台上得到一个错误说hasClass()'is not a function'.
我想我可以在没有函数的情况下做到这一点,然后绑定插件外部的窗口调整大小事件,但我试图将其保持为单个调用,我确信我错过的是非常简单的。
一种常见的解决方案是在this
具有期望值的作用域中创建一个名为that
或self
的局部变量,然后在内部函数的作用域中引用该局部变量:
(function( $ ) {
$.fn.responsiveNav = function() {
var self = this; // local variable
function enable_responsive_nav() {
if( self.hasClass('class') ) { // self is in scope
//do stuff
}
}
$(window).resize(function(e) {
enable_responsive_nav();
});
enable_responsive_nav();
return this;
};
}( jQuery ));
$('nav').responsiveNav();
我尝试将其作为函数参数传递:
enable_responsive_nav( this )
让我们跟随这个链:
jQuery将调用您的事件回调与this
引用DOM元素(不是jQuery对象),该事件被挂钩。所以你可以这样做:
enable_responsive_nav( $(this) );
与 …
if( arg.hasClass('class') ) {
//do stuff
}
或
enable_responsive_nav.call(this);
if($(this).hasClass('class') ) {
//do stuff
}
相关文章:
- 我可以从内部函数中产生吗?
- 从内部函数javascript内部分配外部函数的对象
- 将外部函数返回的id传递给内部函数
- 重复调用的同一函数会重置setTimeout内部函数
- Javascript中的内部函数作用域
- 对象内部函数内的对象文本的范围
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- JavaScript 如何定义内部函数
- bluebird promise catch() 没有使用 Promise.CancelError 调用内部函数
- JavaScript 在内部函数中保留一个 var
- 如何使用Javascript访问内部函数
- 使用从内部函数返回的异步数据对外部函数返回promise
- Javascript对象看不到内部函数
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 如何将参数传递到内部函数中
- JavaScriptEs6在内部函数中引用了这一点
- 需要将内部函数绑定到元素的单击事件
- 将此对象传递给JavaScript中的内部函数
- JavaScript 面向对象的调用函数内部函数或调用函数 insede var
- 从内部函数内部突破while循环'的身体