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版本中已经得到了清理,所以请看一看,看看您的进展如何 最好的
杰米。嘿,你能告诉我你提到的评论的方向吗?我几乎没有参考官方的指导方针就把它编好了,因为我在任何地方都找不到它们。干杯为了完整起见,你的评估是正确的,我很快就发现了,几天后又更正了:)嘿,你能给我指一下你提到的评论的方向吗?我几乎没有参考官方的指导方针就把它编好了,因为我在任何地方都找不到它们。干杯为了完整性,你在评估中是正确的,我很快就发现了,并在几天后更正:看马基尔斯塔特的答案——考虑用工作代码和适当的链接更新问题。干杯。看马基尔斯塔特的回答——考虑用工作代码和适当的链接更新问题。干杯