Javascript jQuery';一个函数和一个对象?
我指的是Javascript jQuery';一个函数和一个对象?,javascript,jquery,Javascript,Jquery,我指的是{}[object object]中的对象。它如何同时执行$(选择器)和$.fn.init 你能给我举个简单的例子吗?它是一个物体 $具有不同的功能 您可以通过制作自己的对象来测试这一点: var $ = { select: function(id){return document.getElementById(id);} } function $(id){ return $.select(id); } 是完全合法的代码。Javascript是一种面向对象的语言
{}[object object]
中的对象。它如何同时执行$(选择器)
和$.fn.init
你能给我举个简单的例子吗?它是一个物体
$
具有不同的功能
您可以通过制作自己的对象来测试这一点:
var $ = {
select: function(id){return document.getElementById(id);}
}
function $(id){
return $.select(id);
}
是完全合法的代码。Javascript是一种面向对象的语言,所以函数是对象,只是可以调用的奇特的对象
foo = function() { console.log("foo") }
foo.bar = function() { console.log("bar") }
foo() //=> prints "foo"
foo.bar() //=> prints "bar"
这不是jQuery所独有的,而是javascript的一个方面。所有函数都是对象。例如:
var f = function() { alert('yo'); }
f.foo = "bar";
alert(f.foo); // alerts "bar"
f(); // alerts "yo"
人们使用javascript函数,这会产生有趣的设计模式。。Jquery使用了许多这样的模式,并围绕许多函数创建了一个很好的包装器。。因此,jquery最终就像一个静态类,使用它可以完成非常简洁的工作 与所有类一样,它有一个名称,默认名称是jQuery。$isnothing是一个绑定到jQuery库中的标识符,它使您不必键入“jQuery”作为标识符 它是$符号这一事实是任意的。在某个时候,人们决定使用$符号,但事实是,它几乎可以是任何类型的ECMAScript可接受的标识符 我们使用$作为标识符的主要原因是,在键入一个字符而不是字符串时,您不太可能犯简单的打字错误 希望这能把事情说清楚。。如果我有什么不对劲,请纠正我 假设我自己的库的一个简单示例是假设一个计算器类
var Calculator= (function()
{
function add(a,b)
{
return a+b;
}
function subtract(a,b)
{
return a-b;
}
function multiply()
{
return a*b;
}
function log()
{
console.log("log 123")
}
return
{
add: add,
subtract: subtract,
multiply: multiply
}
}());
现在,我可以使用Calculator类执行以下操作:
Calculator.multiply(Calculator.add(2,3),5);
add my local函数是私有的,不公开在外部使用。在这种情况下,无法使用Calculator.log访问我的日志函数,它将显示在对象上找不到方法
现在回到你的问题,你可以这样做:
var=计算器
现在使用calc函数,如
_.multiply(_.add(2,3),5);
有趣的是,还有一个名为下划线的库。
$
是一个函数。
美元的方法可以返回任何东西
例如:
$ = function() {
return {
foo : function() { return 'baa'; },
r1: 1,
r2 : 'string'
}
};
typeof $ <- function
typeof $() <- object
typeof $().foo <- function
typeof $().foo() <- string
typeof $().r1; <- number
typeof $().r2 <- string
$=function(){
返回{
foo:function(){return'baa';},
r1:1,
r2:“字符串”
}
};
typeof$jQuery
或$
是一个函数(您知道$
是jQuery
的别名)
在Javascript中,任何东西都是一个对象,甚至函数也一样。因此,您可以直接向函数添加属性
jQuery.find = function () {
}
那么它是如何作为一个对象工作的呢?@David,因为在JavaScript函数中是对象:)
。您可以将函数视为高级对象—它们可以完成常规对象所能完成的一切,但它们还具有一些附加功能…这是函数编程的全部要点。可以将函数作为参数传递,也可以作为参数返回,等等。。它们必须是对象。如果你想做这样的事情,为什么不使用一个单独的对象呢?@David如果你可以只使用一个对象,然后同时执行$(…)
和$。foo(…)
?那应该是“一种面向对象的函数式语言”,因为仅仅是面向对象并不意味着函数是第一类的,这对我来说并不适用。当我尝试它时,它返回“对象不是函数”——通常只有代码的答案。试着添加一个。谢谢。这应该是答案,我想这需要一点解释,但是玩了一会儿我明白了,谢谢你帮了我很多忙!
// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},
jQuery.find = function () {
}
var q=function(){};
var s = function(){
alert("base");
window.s = s;
return new q()};
q.fn = q.prototype = {};
q.fn.x = s.x = function(){alert("x");return this;};
q.fn.y = s.y = function(){alert("y");return this;};
q.fn.z = s.z = function(){alert("z");return this;};
s().y().z().x();
s.z().x().y();