Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击处理程序ECMA脚本6中的此范围_Javascript_Jquery_Ecmascript 6 - Fatal编程技术网

Javascript 单击处理程序ECMA脚本6中的此范围

Javascript 单击处理程序ECMA脚本6中的此范围,javascript,jquery,ecmascript-6,Javascript,Jquery,Ecmascript 6,随着范围的扩大,此将在ES6箭头功能中可用 但在这种情况下,我无法访问arrow函数中的this,而它正在使用普通的匿名函数 范例 样本1 $(document).ready(function() { $('.principal').click(() => { alert($(this).parent().html()); // 'this' is undefined here }); }) 样本2 $(document).ready(function()

随着
范围的扩大,此
将在
ES6
箭头功能中可用

但在这种情况下,我无法访问arrow函数中的
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
    });
})

将外部功能也更改为箭头功能

$( document ).ready ( ( ) => {
    $( '.principal' ).click ( ( ) => {
        alert ( $( this ).parent().html() ); 
    } );
} );
您也可以尝试(根据注释添加此选项):


将外部功能也更改为箭头功能

$( document ).ready ( ( ) => {
    $( '.principal' ).click ( ( ) => {
        alert ( $( this ).parent().html() ); 
    } );
} );
您也可以尝试(根据注释添加此选项):

在第一种情况下

$(document).ready(function() {
    $('.principal').click(() => {
        alert($(this).parent().html()); // 'this' is undefined here
    });
})
由于您使用的是arrow函数,因此这里的
this
对象将属于上下文外部函数,即
$(document).ready
,因此它属于整个DOM元素,正如您在下面的代码段中看到的,而不是单击的元素

在第二种情况下

$(document).ready(function() {
    $('.principal').click(function() {
        alert($(this).parent().html()); // 'this' is available here
    });
})
引用
单击
函数的上下文,因此它返回被单击的DOM元素

$(文档).ready(函数(){
$('.principal')。单击(()=>{
console.log(this);
});
})

在第一种情况下单击

$(document).ready(function() {
    $('.principal').click(() => {
        alert($(this).parent().html()); // 'this' is undefined here
    });
})
由于您使用的是arrow函数,因此这里的
this
对象将属于上下文外部函数,即
$(document).ready
,因此它属于整个DOM元素,正如您在下面的代码段中看到的,而不是单击的元素

在第二种情况下

$(document).ready(function() {
    $('.principal').click(function() {
        alert($(this).parent().html()); // 'this' is available here
    });
})
引用
单击
函数的上下文,因此它返回被单击的DOM元素

$(文档).ready(函数(){
$('.principal')。单击(()=>{
console.log(this);
});
})


Click
原因是jQuery将Click处理程序中的
this
对象显式绑定到捕获事件的元素。获取该上下文的唯一方法是使用标准函数,因为实际上箭头函数会忽略该绑定

因此,您需要:

  • 坚持使用回调的标准函数,或者
  • 使用jQuery传递给回调的事件对象参数的
    currentTarget
    属性
后者看起来是这样的:

$(文档).ready(函数(){
$('.principal')。单击((e)=>{
log($(e.currentTarget.parent().html());
});
})


Click me
原因是jQuery将Click处理程序中的
这个
对象显式绑定到捕获事件的元素。获取该上下文的唯一方法是使用标准函数,因为实际上箭头函数会忽略该绑定

因此,您需要:

  • 坚持使用回调的标准函数,或者
  • 使用jQuery传递给回调的事件对象参数的
    currentTarget
    属性
后者看起来是这样的:

$(文档).ready(函数(){
$('.principal')。单击((e)=>{
log($(e.currentTarget.parent().html());
});
})


单击箭头功能中的“我”
“此”在所附上下文中具有其原始含义。在第一个示例中,
内部
就绪
回调指向
文档
,因此,
此作为单击处理程序传递的内部箭头函数也指向
文档

在第二个示例中,使用普通函数作为click handler
这个
由jQuery在内部绑定到调用了
click
方法的元素。Arrow函数不绑定
这个
参数,而是使用封闭的上下文-这就是为什么
这个
不能像普通函数一样绑定的原因


在您的示例中,您不需要访问单击处理程序中的外部上下文,因此不应使用箭头函数。在这种情况下,请使用普通函数。

在箭头函数
中,此
的原始含义来自于所包含的上下文。在第一个示例中,
内部
就绪
回调指向
文档
,因此,
此作为单击处理程序传递的内部箭头函数也指向
文档

在第二个示例中,使用普通函数作为click handler
这个
由jQuery在内部绑定到调用了
click
方法的元素。Arrow函数不绑定
这个
参数,而是使用封闭的上下文-这就是为什么
这个
不能像普通函数一样绑定的原因


在您的示例中,您不需要访问单击处理程序中的外部上下文,因此不应该使用箭头函数。在这种情况下,请使用普通函数。

它仍然是未定义的。
Hmm我只是在一个简单的示例中尝试了它。我看到了一个定义(尽管我没有使用jquery)。我还有另一个选择,我会把它作为答案的一部分。使用bindYeah加上1。它不是ES6纯的,但“bind”的明确性对我来说总是很有用的。你不能绑定到arrow函数。请检查这一点,以了解更多细节:它仍然是未定义的,我只是在一个简单的例子中尝试过。我看到了一个定义(尽管我没有使用jquery)。我还有另一个选择,我会把它作为答案的一部分。使用bindYeah加上1。它不是ES6纯的,但“bind”的明确性对我来说总是很有用的。你不能绑定到arrow函数。请检查此项,以了解更多详细信息:这是一个经典问题,请参见此处,您将获得答案,而不是使用e.target获取元素required@VinodLouis
event.currentTarget
几乎总是更好。@lonesomeday是的,对,currentTarget可以安全使用,我同意这是一个经典问题,请看这里,您将得到答案而不是使用e.target来获取元素required@VinodLouis
event.currentTarget
几乎总是更好。@lonesomeday是的