2017-07-28 53 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')