this
箭头函数中ES6
的范围可用。
但是在这种情况下,当我使用普通的匿名函数时,我无法在箭头函数中访问this
实施例
示例1
$(document).ready(function() {
$('.principal').click(() => {
alert($(this).parent().html()); // 'this' is undefined here
});
})
示例2
$(document).ready(function() {
$('.principal').click(function() {
alert($(this).parent().html()); // 'this' is available here
});
})
答案 0 :(得分:1)
在第一种情况下
$(document).ready(function() {
$('.principal').click(() => {
alert($(this).parent().html()); // 'this' is undefined here
});
})
由于您正在使用箭头函数,此处的this
对象将属于上下文外部函数$(document).ready
,因此您可以看到整个DOM元素,如下面的代码段所示而不是点击的元素。
在第二种情况下
$(document).ready(function() {
$('.principal').click(function() {
alert($(this).parent().html()); // 'this' is available here
});
})
this
引用click
函数的上下文,因此返回单击的DOM元素
$(document).ready(function() {
$('.principal').click(() => {
console.log(this);
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="principal">Click</button>
答案 1 :(得分:1)
原因是jQuery显式地将点击处理程序中的this
对象绑定到捕获事件的元素。获取该上下文的唯一方法是使用标准函数,因为箭头函数实际上忽略了这种绑定。
所以你需要:
currentTarget
属性后者看起来像这样:
$(document).ready(function() {
$('.principal').click((e) => {
console.log($(e.currentTarget).parent().html());
});
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><button class="principal">Click me</button></div>
&#13;
输出:
<button class="principal">Click me</button>
答案 2 :(得分:0)
也将外部功能更改为箭头功能。
$( document ).ready ( ( ) => {
$( '.principal' ).click ( ( ) => {
alert ( $( this ).parent().html() );
} );
} );
您也可以尝试(根据评论添加此选项):
$( document ).ready ( function {
$( '.principal' ).click ( ( ) => {
alert ( $( this ).parent().html() );
} );
}.bind ( this ) );
答案 3 :(得分:0)
在箭头函数中,this
从封闭的上下文中有其原始含义。在第一个示例中,this
内部ready
回调指向document
,因此作为点击处理程序传递的箭头函数内的this
也指向document
。 />
在具有正常功能的第二个示例中,点击处理程序this
由jQuery内部绑定到调用click
方法的元素。箭头函数不绑定this
参数但使用封闭上下文 - 这就是为什么this
不能像正常函数的cacse那样绑定。
在您的示例中,您不需要在点击处理程序中访问外部上下文,因此在这种情况下您不应使用箭头功能,请使用正常功能。