Javascript obj.foo()和obj(a.foo)-解决方案是如何做到这一点的?(jQuery的创意)
首先,我为我糟糕的英语感到抱歉。我必须练习,并将尽我最大的努力 我将用javascript为自己尝试一些新的东西。我是从jQuery图书馆得到这个想法的。有两个 使用“jQuery”或“$”的不同方法Javascript obj.foo()和obj(a.foo)-解决方案是如何做到这一点的?(jQuery的创意),javascript,jquery,Javascript,Jquery,首先,我为我糟糕的英语感到抱歉。我必须练习,并将尽我最大的努力 我将用javascript为自己尝试一些新的东西。我是从jQuery图书馆得到这个想法的。有两个 使用“jQuery”或“$”的不同方法 jQuery(arg).foo(); // first way jQuery.foo(); // second way 现在我想对一个对象做同样的事情 obj(arg).foo(); obj.foo(); 我的第一个问题是:jQuery如何能够成为一个返回对象的函数,并成为 同样的方
jQuery(arg).foo(); // first way
jQuery.foo(); // second way
现在我想对一个对象做同样的事情
obj(arg).foo();
obj.foo();
我的第一个问题是:jQuery如何能够成为一个返回对象的函数,并成为
同样的方式
obj(arg).foo();
看起来像是一个返回对象的函数。
但是
看起来像一个物体
我尝试使用obj.foo()和obj().foo()进行操作,但没有任何效果-无论如何,我尝试了一些返回的错误:foo()未定义
你知道jQuery是如何解决这个问题的吗?以这种非正常的方式注册变量jQuery
以下是我想要实现的(代码不起作用!):
在Javascript中,所有函数也是对象 你可以写
someFunction.someProperty = function() { ... };
someFunction.someProperty();
在Javascript中,所有函数也是对象 你可以写
someFunction.someProperty = function() { ... };
someFunction.someProperty();
这里有一个小提琴,展示了jQuery是如何实现的(不完全是这样,但核心逻辑就在那里) 基本上,jQuery总是返回自身(实际上不是jQuery对象,而是jQuery.fn的一个实例),除非函数调用需要返回一些东西 因为它会返回自身,所以所有的属性和方法都会返回并作为一个链提供。jQuery的诀窍在于,它将元素存储在这个数组中,但要像在数组中一样使用整数键 这就是我在这一行的例子中所做的
this[0] = document.getElementById(id);
这意味着该元素现在是存储的,并且可用于所有属于该元素的方法,因此当我调用colorMe时,[0]将为我提供目标元素
这是密码
function wrap(id) {
return new wrap.init(id);
};
wrap.init = function(id) {
this[0] = document.getElementById(id);
return this;
};
wrap.init.prototype = {
colorMe: function(color) {
this[0].style.color = color;
return this;
}
};
$(function() {
wrap('boo').colorMe('red');
});
这里有一个小提琴,展示了jQuery是如何实现的(不完全是这样,但核心逻辑就在那里) 基本上,jQuery总是返回自身(实际上不是jQuery对象,而是jQuery.fn的一个实例),除非函数调用需要返回一些东西 因为它会返回自身,所以所有的属性和方法都会返回并作为一个链提供。jQuery的诀窍在于,它将元素存储在这个数组中,但要像在数组中一样使用整数键 这就是我在这一行的例子中所做的
this[0] = document.getElementById(id);
这意味着该元素现在是存储的,并且可用于所有属于该元素的方法,因此当我调用colorMe时,[0]将为我提供目标元素
这是密码
function wrap(id) {
return new wrap.init(id);
};
wrap.init = function(id) {
this[0] = document.getElementById(id);
return this;
};
wrap.init.prototype = {
colorMe: function(color) {
this[0].style.color = color;
return this;
}
};
$(function() {
wrap('boo').colorMe('red');
});
您需要学习更高级的Javascript。可能的重复(jQuery方法比您预期的稍微复杂一些,因为它包括一个解决方案,该解决方案不需要在
jQuery
构造函数之前添加前缀new
)。您需要学习更高级的Javascript。可能的重复(jQuery方法比您预期的要稍微复杂一些,因为它包含了一个解决方案,不需要在jQuery
构造函数之前加前缀new
)。