Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqueryoop技术混乱_Javascript_Jquery - Fatal编程技术网

Javascript jqueryoop技术混乱

Javascript jqueryoop技术混乱,javascript,jquery,Javascript,Jquery,我在看。我基本上理解这一点,但在试图理解其逻辑时,我有点迷茫: result = $(result); var template = result[0]; if (template) { for (var i in template) { if (typeof (template[i]) == 'function') {

我在看。我基本上理解这一点,但在试图理解其逻辑时,我有点迷茫:

result = $(result);

        var template = result[0];
        if (template) 
        {
            for (var i in template)
            {
                if (typeof (template[i]) == 'function') 
                {
                    result[i] = function()
                    {
                        this.each(function() 
                        {
                            this[i]();
                        });
                    };
                }
            }
        }
直到
if(typeof(template[I])=='function')
块,我都知道代码正在查看插件中声明的每个公共方法,但在这之后,它让我感到困惑

有没有可能有人能一步一步地帮我解决这个问题

这是杰米的原始代码

(function($) {
  $.fn.encapsulatedPlugin = function(plugin, definition, objects, options) {
    var result = [];
    objects.each(function() {
      var element = $(this);

      if (!element.data(plugin)) {
        // Initialise
        var instance = new definition(this, options);

        // Store the new functions in a validation data object.
        element.data(plugin, instance);
      }
      result.push(element.data(plugin));
    });

    // We now have a set of plugin instances.
    result = $(result);

    // Take the public functions from the definition and make them available across the set.
    var template = result[0];
    if (template) {
      for ( var i in template) {
        if (typeof (template[i]) == 'function') {
          result[i] = function() {
            this.each(function() {
              this[i]();
            });
          };
        }
      }
    }

    // Finally mix-in a convenient reference back to the objects, to allow for chaining.
    result.$ = objects;

    return result;
  };

})(jQuery);

那东西看起来破了。同一个
i
被绑定多次(只有新的函数定义才能引入新的作用域[read:free variable])<代码>结果[i](其中
i
是循环中的当前值)包含一个函数,该函数在求值时,将在调用时“查看”
i
(来自循环)的最后一个值

(甚至都没有试过)我声称它没有广告宣传的效果

“更正”版本应为:

result[i] = (function (_i) {
  return function() {
    this.each(function() {
      this[_i]();
    });
  };
}(i));
快乐编码:)



我试图解释其余的,但当我意识到发布的
myplugin
方法也包含另一个关键错误并偏离了评论时,我的大脑融化了。我不想再分析这些了。不建议使用看起来破损的。

。同一个
i
被绑定多次(只有新的函数定义才能引入新的作用域[read:free variable])<代码>结果[i](其中
i
是循环中的当前值)包含一个函数,该函数在求值时,将在调用时“查看”
i
(来自循环)的最后一个值

(甚至都没有试过)我声称它没有广告宣传的效果

“更正”版本应为:

result[i] = (function (_i) {
  return function() {
    this.each(function() {
      this[_i]();
    });
  };
}(i));
快乐编码:)



我试图解释其余的,但当我意识到发布的
myplugin
方法也包含另一个关键错误并偏离了评论时,我的大脑融化了。我不想再分析这些了。不建议使用。

您实际上是在使用旧代码。正如已经指出的,在早期的草稿中有一些奇怪的行为(我只使用一个封装函数测试了第一个版本,这就是为什么我直到一两天后才注意到重新绑定的问题)。特别是,传递参数是不可能的。不管怎样,从那以后已经有过几次迭代

可以找到最新的代码,它已经应用了许多修复和优化

您感兴趣的代码位的基本操作理论如下:

对于plugin对象上的每个公共函数,创建一个包装函数,在集合中的每个元素上执行公共函数。循环完成迭代后,将有一个结果对象,由函数名键入,其中的每个成员将是一个函数,该函数对集合中的每个元素执行类似命名的基础函数

这段代码在GitHub版本中已经得到了清理,所以请看一看,看看您的进展如何

最好的


杰米。

你实际上是在用旧代码工作。正如已经指出的,在早期的草稿中有一些奇怪的行为(我只使用一个封装函数测试了第一个版本,这就是为什么我直到一两天后才注意到重新绑定的问题)。特别是,传递参数是不可能的。不管怎样,从那以后已经有过几次迭代

可以找到最新的代码,它已经应用了许多修复和优化

您感兴趣的代码位的基本操作理论如下:

对于plugin对象上的每个公共函数,创建一个包装函数,在集合中的每个元素上执行公共函数。循环完成迭代后,将有一个结果对象,由函数名键入,其中的每个成员将是一个函数,该函数对集合中的每个元素执行类似命名的基础函数

这段代码在GitHub版本中已经得到了清理,所以请看一看,看看您的进展如何

最好的


杰米。

嘿,你能告诉我你提到的评论的方向吗?我几乎没有参考官方的指导方针就把它编好了,因为我在任何地方都找不到它们。干杯为了完整起见,你的评估是正确的,我很快就发现了,几天后又更正了:)嘿,你能给我指一下你提到的评论的方向吗?我几乎没有参考官方的指导方针就把它编好了,因为我在任何地方都找不到它们。干杯为了完整性,你在评估中是正确的,我很快就发现了,并在几天后更正:看马基尔斯塔特的答案——考虑用工作代码和适当的链接更新问题。干杯。看马基尔斯塔特的回答——考虑用工作代码和适当的链接更新问题。干杯