this 到底指向button还是其他?--this作用域的一个探讨

this是最麻烦的一个东西了。就好像this这个孩子到底是谁的孩子?到底是亲生的还是隔壁王叔叔的?头疼。。。

下面探讨一个关于this的问题

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
  <title>Events in JavaScript: Removing event listeners</title>
</head>
<body>
  <button id="element">Click Me</button>
</body>
</html>

var element = document.getElementById('element');

var user = {
 firstname: 'Bob',
 greeting: function(){
   alert('My name is ' + this.firstname);
   alert(this)
 }
};

// Attach user.greeting as a callback
//差别一
element.addEventListener('click', function(){
  user.greeting()
});
//差别二
element.addEventListener('click', user.greeting)

差别一输出结果
my name is Bob
[object Object]

差别二输出结果
my name is undefined
[object HtmlButtonElement]

why?
为什么会这样子呢?

先分析一
一里面的函数是执行了,有点像闭包的感觉。

element.addEventListener('click', function(){
  (function(){
      alert('My name is ' + this.firstname);
      alert(this)
  })()
});

分析二:
二里面的函数没有执行,感觉就是

element.addEvenListener('click', function(){
    alert('My name is ' + this.firstname);
    alert(this)
})

如果全属瞎扯,那我就是在瞎扯呗。。其实真正的原理我确实不懂,但是我觉得就是这么回事吧,欢迎大家跟我讨论。

再探讨一个例子:

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
  <title>Events in JavaScript: Removing event listeners</title>
</head>
<body>
  <button id="element" onclick="abc()">Click Me</button>


<script>
function abc(){
alert(this)
}
</script>
</body>
</html>

昨天面试我的那个哥们说,这里的this指的是button,我当时就懵了,我觉得自己可能真的学的不够深,增强了我的学习原生js的紧迫感。

我测试了好多,也问了好多,我觉得除了传参,这种写法不怎么可能让this指向button

我觉得原生js如果学好了确实是前端工程师的核心竞争力。因为这一块就是前端目前的核心。切图放图什么玩意儿的,入门很快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值