9

我有我正在阅读的书中的这段代码片段。并想了解$({})它的确切含义和用途。

我尝试在几个搜索引擎甚至 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);
       }
    };

我确实发现了一个类似的问题$([])但我认为这并不完全相同。

4

2 回答 2

15

您只是将一个基本的 javascript 对象包装为 jQuery 对象。

来自jquery 文档

使用普通对象

目前,jQuery 中封装的纯 JavaScript 对象支持的唯一操作是:.data()、.prop()、.bind()、.unbind()、.trigger() 和 .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

如果您保留使用 创建的对象$({}),则可以将其用作 、 等的被调用databind。这可能是您可以制作的最小的非 DOM 可保留 jquery 对象。

于 2012-09-06T16:48:22.863 回答
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 传递一个字符串,而是另一种数据类型。

于 2012-09-06T17:17:10.650 回答