2012-12-17 66 views
2

如果我創建一個jQuery的包裹設置,放入console.log,它看起來像爲什麼jQuery的結果看起來像一個函數?

enter image description here


我知道,我們可以「欺騙」的console中顯示objectsarrays,這意味着如果我們有

var obj = { 
    0: 'some', 
    1: 'data' 
}; 

它將輸出

enter image description here

但是,如果我們增加一個splice methodlength property,它將成爲

enter image description here


問題:我怎樣才能創建一個函數,創建這樣一個array-like object,但仍在控制檯中顯示爲function,比如jQuery呢?我不明白爲此的jQuery代碼。

結果就像myFunction("some", "data")


更新:

好像我沒有讓自己清楚。我想知道,我可以如何創建和設置一個函數,構造函數,以及如何在控制檯中打印array-like object作爲function(elem1, elem2, ...)。一個完美的答案包含了一個簡單的例子。

+0

只要您可以閱讀它,它在控制檯中的外觀如何?真的很重要,爲什麼它很重要,以及您使用它的原因是什麼(真的好奇)? +1在這個問題上的努力順便說一句。 – adeneo

+0

我用最新的firefox +螢火蟲截圖。我只想知道我怎樣才能完成這個輸出。 –

+0

我猜想它只是記錄'obj.constructor.name'(如果可用)。你使用哪個jQuery,開發版本? – Bergi

回答

2

一個jQuery對象的Firebug控制檯的默認外觀Object[one, two, ...]。 如果您將array-like object與構造函數結合使用,您可以擁有相同的功能。就像乍得的反應一樣。

但在你的情況,你有一個「特殊的外觀」,因爲所謂的FireQuery一個Firefox插件的jQuery的對象:http://firequery.binaryage.com/

據我所知,你不能在Firebug控制檯相同的結果。除非你製作你自己的插件。

1
+0

我確實使用過'console.log',不是'console.dir()'。如何實現jQuery的外觀? –

0

如果它存在它只是輸出的Object.constructor.name值:

>>> var Mine = function() {} 
undefined 

>>> new Mine() 
Object {} 

//------------------------------- 

>>> function Mine() {} 
undefined 

>>> new Mine() 
Mine {} 

//------------------------------- 

>>> function Mine() {} 
undefined 

>>> Mine.prototype.length = 10; 
10 

>>> Mine.prototype.splice = function() {} 
function() 

>>> new Mine() 
Object[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined] 

其輸出我在控制檯中看到jQuery的匹配:

>>> jQuery('span'); 
Object[span.profile-triangle, span.reputation-score, span, span.badge2, ...] 

我使用Firefox v17.0.1和Firebug v1.11.1

希望這會有所幫助。

編輯:還要注意的是Function.name是隻讀的一次函數創建1

相關問題