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如果学好了确实是前端工程师的核心竞争力。因为这一块就是前端目前的核心。切图放图什么玩意儿的,入门很快。