在jquery $({})中包装普通的javascript对象

时间:2012-09-06 16:47:05

标签: javascript jquery

我正在阅读一本书中的这段代码。并希望了解$({})的含义以及它的用途是什么。

我尝试在几个搜索引擎上搜索,甚至在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,但我认为这不是一回事。

2 个答案:

答案 0 :(得分:15)

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

来自jquery documentation

  

使用普通对象

     

目前,唯一支持的业务   在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

如果您使用$({})创建对象,则可以将其用作databind的被调用者,依此类推。这可能是你可以制作的最小的非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字符串,而是另一种数据类型。