2016-08-19 39 views
-2

我想了解this jsFiddle的輸出。爲什麼這些JavaScript函數未定義?

我正在通過Google's CDN加載jQuery UI,使用左側的「外部資源」選項。

有些東西我百思不得其解......

  • jQuery UI的部分作品。我可以拖動「拖動我」div。

    所以jQuery UI .draggable()docs)很好。

    另一方面.button()docs)不適用jQuery UI主題CSS。

    爲什麼會.draggable()工作,但不是.button()? (語法錯誤?)

  • draggable怎麼可能是undefined

    它的作品,所以它必須是一個功能,對吧?

  • click怎麼樣undefined

    click()來自jQuery,而$是一個函數。 click也不是嗎?

這裏的JS ...

(function() { 

    $(document).ready(function() { 

    $('.dr').draggable(); 

    $('.btn').button(); 

    $('.btn').click(function(event) { 
     alert('Clicked'); 
    }); 

    $('.output').append('typeof $: ' + typeof $ + '<br />'); 

    $('.output').append('typeof draggable: ' + typeof draggable + '<br />'); 

    $('.output').append('typeof click: ' + typeof click + '<br />'); 

    $('.output').append('typeof button: ' + typeof button + '<br />'); 

    }); 

}()); 

我得到的輸出是...

typeof $: function // As expected. 
typeof draggable: undefined // How can it be undefined and still work? 
typeof click: undefined // ??? 
typeof button: undefined 
+2

你爲什麼認爲$('...').draggable'可以被引用爲'draggable'?這不是JavaScript的工作原理。 – Xufox

回答

2

上面所用的功能是$().draggable$().click$().button,不draggableclickbutton,其中,在該範圍,最終尋找window.draggablewindow.clickwindow.button

得到的類型的$().draggable$().click$().button的另一種方式是通過$.prototype,其通常別名爲$.fn。所以:

$().draggable$().click$().button,或者 $.prototype.draggable$.prototype.click$.prototype.button$.fn.draggable$.fn.click$.fn.button是相同的。並且這些不同於draggable,clickbutton,它們在您的功能中與window.draggable,window.clickwindow.button相同。

+0

好的,我明白你在說什麼了。謝謝您的幫助。我測試了'typeof $()。draggable',它確實是一個函數。太好了。這是清理的一件事。有關爲什麼'.button()'不適用jQuery UI CSS的任何想法? – Ethan

+0

看起來像jsfiddle中的錯誤。它沒有正確添加CSS「外部資源」,您在其中鍵入.css文件。我剛剛刪除它並重新鍵入,它的工作原理:https://jsfiddle.net/acdcjunior/meb6Lcas/4/ – acdcjunior

0

那是因爲你沒有搭售那些東西,所以它最後看着window

您應該關注$.fn

-1

功能與方法不同。 draggable不等於$('.dr').draggable,依此類推。

相關問題