我的意思是{} [object Object]
中的对象。它如何同时$(selector)
和$.fn.init
?
你能给我一个简单的例子吗?
答案 0 :(得分:31)
这不是jQuery独有的,而是javascript的一个方面。所有功能都是对象。 E.g:
var f = function() { alert('yo'); }
f.foo = "bar";
alert(f.foo); // alerts "bar"
f(); // alerts "yo"
答案 1 :(得分:5)
Javascript是一种面向对象的语言,所以函数是ARE对象,只是你可以调用的花哨的对象。
foo = function() { console.log("foo") }
foo.bar = function() { console.log("bar") }
foo() //=> prints "foo"
foo.bar() //=> prints "bar"
答案 2 :(得分: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
答案 3 :(得分:3)
jQuery
或$
是一项功能(您知道$
是别名jQuery
)。
// 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 );
},
在Javascript中,一切都是对象,甚至function
。因此,您可以直接添加属性以实现功能。
jQuery.find = function () {
}
答案 4 :(得分:2)
这是一个对象。
$
拥有不同的功能。
您可以通过制作自己的对象来自行测试:
var $ = {
select: function(id){return document.getElementById(id);}
}
function $(id){
return $.select(id);
}
答案 5 :(得分:2)
像所有类一样,它有一个名称,默认名称是jQuery。 $是没有什么可以购买绑定到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);
添加我的本地函数是私有的,不会暴露在外面使用。在这种情况下,我无法使用Calculator.log访问我的日志函数,它会说在对象上找不到方法。
现在回到你的问题,你可以这样做:
var _ =计算器;
现在使用calc函数,如
_.multiply(_.add(2,3),5);
有趣的是,有一个名为下划线的库..
答案 6 :(得分:2)
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();
答案 7 :(得分:1)
var s = function(){};
s.test = function(){console.log('inside s');}
s.test();
是完全合法的代码。