2017-07-28 122 views
3

火狐(v52.0),jQuery的jquery不工作?

這個工程:

// example 1 
$('html').find('body') 

這個工程:

// example 2 
var h 
h=$('html') 
h.find('body') 

這不起作用:

// example 3 
var f 
f=$('html').find 
f('body') 

我得到

Error: Permission denied to access property "ownerDocument"

爲什麼?

但這個工程:

// example 4 
var a 
a = x => $('html').find(x) 
a('body') 
+0

問題的一部分是知道該問什麼, – Jasen

回答

2

例3不起作用,因爲find被稱爲在全球範圍內,當你把它分配給f。如果您使用call並傳遞有效的jQuery對象作爲上下文,則代碼有效。試試這個

var f = $('html').find; 
 
console.log(f.call($('html'), 'body').length)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

此外,例如4部作品,因爲a可以轉換爲下面的代碼,如果寫成無箭功能。

var a = function(x) { 
    return $('html').find(x); 
}; 

這只是例1中,但爲了一個包裝函數取一個參數

+0

似乎工作。但是那個錯誤信息是什麼意思? – Jasen

+1

我實際上得到了不同的錯誤信息,_「this.pushStack不是函數」_。我知道這個錯誤是因爲_this_上下文不是有效的'jQuery'對象。也許,你的錯誤也是與上下文錯誤有關。 –

+0

我認爲你的回答是正確的。 javascript'this'令我困惑。 – Jasen

1

沒有,jQuery是不是功能

通過查看jQuery的核心源代碼: https://github.com/jquery/jquery/blob/master/src/core.js#L51

你可以看到它在this中保持狀態。

f=$('html').findfthis發生變化,不再是持有this狀態$('html')

-

在這種情況下,你只是代理的方法調用。 findthis沒有變化。

var a 
a x => $('html').find(x) 
a('body')