javascript - 创建 jquery 扩展。范围问题

标签 javascript jquery

我创建了一个简单的 jQuery 扩展(这是我的第一个)。

(function($){
  var MyClass = function(opt){
     //..
  };
  //one of the methods of my extension
  $.fn.myExtension = function(opt){
    this._ext = new MyClass(opt);
    return this;
  };
  $.fn.myExtensionOtherMethod = function(){
    if(this._ext){
      //do something ..
    }
    return this;
  };
}(jQuery));

//using ..
$(document).ready(function(){
  $('#selector').myExtension({
    //options ..
  });
  $('#selector').myExtensionOtherMethod();
});

当我调用方法 $('#selector').myExtensionOtherMethod(); 时,this 不包含 this._ext 变量。我知道这是其他范围,但我知道有一些方法可以在两种方法中访问该变量。我该怎么做?

最佳答案

这实际上不是范围问题。这是因为 jQuery 原型(prototype) $.fn 为您提供了一个 jquery 对象作为 this。即使每次将新的 jQuery 对象设置为上下文时您都选择相同的元素,以便该属性消失。您可以将该属性放在 DOM 元素上并实现您想要的结果。

(function($) {
    var MyClass = function(opt) {};
    //one of the methods of my extension
    $.fn.myExtension = function(opt) {
        this[0]._ext = new MyClass(opt);
        return this;
    };
    $.fn.myExtensionOtherMethod = function() {
        if (this[0]._ext) {
            //do something ..
        }
        return this;
    };
}(jQuery));

//using ..
$(document).ready(function() {
    $('#selector').myExtension({
        //options ..
    });
    $('#selector').myExtensionOtherMethod();
});

这只是上面的一个简单示例。如果你的选择器找到了不止一个元素,你应该遍历它们。但是我只抓取了第一个索引,因为你是按 ID 选择的。

fiddle :https://jsfiddle.net/AtheistP3ace/gd1ehk0d/

正如@charlietfl 在上面提到的那样,我同意该评论。很乐意解释为什么您所做的没有奏效,但可能有更好的方法来实现您的目标。

关于javascript - 创建 jquery 扩展。范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817757/

相关文章:

javascript - 如果没有子元素,父元素应该隐藏

javascript - 如何在 c3js.org 中为多个 XY 折线图添加副标题?

javascript - 使用本地存储从表单发布和获取数据

方法 ="put"的 Jquery 表单现已损坏

javascript - 在 html div 上粘贴事件,内容不可编辑

javascript - 未捕获的类型错误 : Object [object Object] has no method 'datepicker'

javascript - WinJs 中的 View 状态更改事件在哪里?

javascript - 如何在执行下一个函数之前等待函数完成?

javascript - 在引导网格中的第 n 个子项之后插入 div

javascript - 移动时的菜单不会滚动