我正在阅读一本书中的这段代码。并希望了解$({})
的含义以及它的用途是什么。
我尝试在几个搜索引擎上搜索,甚至在SO上搜索。 $({})
不是一个搜索友好的术语。
var Events = {
bind: function(){
if ( !this.o ) this.o = $({});
this.o.bind.apply(this.o, arguments);
},
trigger: function(){
if ( !this.o ) this.o = $({});
this.o.trigger.apply(this.o, arguments);
}
};
我确实找到了一个关于$([])
的类似question,但我认为这不是一回事。
答案 0 :(得分:15)
你只是将一个基本的javascript对象包装为jQuery对象。
使用普通对象
目前,唯一支持的业务 在jQuery中包含的纯JavaScript对象是: .data(),. prop(),. bind(),. unbind(),. strigger()和.triggerHandler()。 在普通对象上使用.data()(或任何需要.data()的方法) 将导致被调用对象的新属性 jQuery {randomNumber}(例如jQuery123456789)。
// define a plain object var foo = {foo:'bar', hello:'world'}; // wrap this with jQuery var $foo = $(foo); // test accessing property values var test1 = $foo.prop('foo'); // bar // test setting property values $foo.prop('foo', 'foobar'); var test2 = $foo.prop('foo'); // foobar // test using .data() as summarized above $foo.data('keyName', 'someValue'); console.log($foo); // will now contain a // jQuery{randomNumber} // property // test binding an event name and triggering $foo.bind('eventName', function (){ console.log('eventName was called'); }); $foo.trigger('eventName'); // logs 'eventName was called'
应该 使用.trigger('eventName'),它将搜索'eventName' 对象上的属性,并在任何附加后尝试执行它 执行jQuery处理程序。它不检查属性 是一个功能与否。为了避免这种行为, 应该使用.triggerHandler('eventName')。
$foo.triggerHandler('eventName'); // also logs 'eventName was called'
这是一个(不是很有用)的例子:
var a =$({});
a.data('b', 3);
console.log(a.data('b')); // this prints 3
如果您使用$({})
创建对象,则可以将其用作data
,bind
的被调用者,依此类推。这可能是你可以制作的最小的非DOM可保持jquery对象。
答案 1 :(得分:1)
这真的与javascript语法有关,而不是jQuery。
{}
适用于以下对象:
//makes an empty object
var myObject = {};
//makes an object containing 'foo' and 'bar' as 'firstItem' and 'secondItem'
var myObject = { firstItem : foo, secondItem : bar };
[]
适用于这样的数组:
//makes a blank array
var myArray = [];
//makes an array containing 'foo' and 'bar' at postions 0 and 1
var myArray = [foo, bar];
()
用于函数(jQuery通常是这样)。这更加复杂,因为它可以有多种含义。
//running an existing function
myFunction();
//running an anonymous function
(function(){
//doSomething }
)();
//running a function with an argument
myFunction(arg);
jQuery通常只是一个名为$
而不是myFunction
的函数,所以......
//runs jQuery as a function on 'arg'
$(arg);
你传递jQuery的论点几乎可以是任何东西。如果你传递一个像'#myDiv'
这样的字符串,jQuery将使用该参数作为选择器从html中获取一个元素。如果你把它传递给像对象或数组这样的东西,它仍然可以用它来做一些事情:http://api.jquery.com/jQuery/就像@dystroy所说的那样。
因此$({})
与$(myBlankObject)
相同,例如:
var myBlankObject = {};
$(myBlankObject);
//is the same as
$({});
和
var myObjectWithStuff = { firstItem : foo, secondItem : bar };
$(myObjectWithStuff);
//is the same as
$({ firstItem : foo, secondItem : bar });
$('selector')
有效。 $({'selector'})
或$(['selector'])
没有,因为您没有传递jQuery字符串,而是另一种数据类型。