## js中对this关键字的理解
### 1、在事件中,指向当前事件
```
<input type="text" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function () {
go();
//在事件中,this指向正在执行事情的当前对象
console.log(this.value);//hello
}
//因函数是window的方法,故调用它的肯定是window中的value
function go() {
console.log(value);//change
}
</script>
```
### 2、在构造函数中,指向当前实例化的对象
```
<script>
// es5
function Person(name,age){
this.name=name;
this.age;
}
// es6
class Persons{
constructor(name,age){
this.name=name;
this.age=age;
}
}
var stu=new Person("quan",18)
var stu1=new Persons("quan",18)
console.log(stu.name)
</script>
```
### 在方法中,谁调用就指向谁
```
例1:
var a = 2;
var obj = {
a : 1,
foo : function(){
console.log(this.a);
}
}
var f = obj.foo;
f(); //2
obj.foo(); //1
例2:
// function Person(name,age){
// this.name=name;
// this.age;
// }
// Person.prototype.eat = function(name){
// console.log("这个方法是所有对象共有的,相当于N个对象公用一个eat方法"+ this.name);
// };
// var stu = new Person("quan")
// var ding = new Person("ding")
// console.log(ding.eat())
// console.log(stu.eat())
```
## 实例:this的指向问题
### 题目:给一个button按钮,点击使它变色,再点击,变回来。用三种方法。
#### tip:在事件中,指向当前事件
```
方法一:
<button id="btn">点我</button>
var btn=document.getElementById('btn');
btn.onclick=function(){
if(this.style.background=='red'){
this.style.background=''
}else{
this.style.background="red"
}
方法二:三元表达式
<button id="btn">点我</button>
var btn=document.getElementById('btn');
btn.onclick=function(){
this.style.background=this.style.background=='red'?'':'red'
}
方法三:用classlist
<style>
.one{
background-color: red;
}
</style>
<button id="btn">点我</button>
var btn=document.getElementById('btn');
btn.onclick=function(){
this.classList.toggle("one")
}
```
### tip:在构造函数中,指向当前实例化的对象
```
class Person{
constructor(name,age){
this.name=name;
this.age=age;
}
}
var str=new Person("quan",18)
```
### tip:在方法中,谁调用就指向谁
```
var a=1;
var obj={
a:2,
go:function(){
console.log(this.a)
}
}
obj.go();//2
obj.go.call()//1
//传参
var a=1;
var obj={
a:2,
go:function(b,c){
console.log(this.a+b+c)
}
}
obj.go.call(window,'4','5')//145
obj.go.call(window,4,5)//10
```
- 空白目录
- 1.css、html
- 1.1 css的选择器有哪些
- 1.2 display属性
- 1.3 图片与文字会有空隙 原理是什么
- 1.4 简述一下你对HTML语义化的理解?
- 1.5 PNG,GIF,JPG的区别及如何选
- 1.6 css中有哪些继承属性
- 1.7 如何实现一个元素的垂直水平居中
- 1.9 position的属性以及特点
- 1.10 @import与link的区别
- 1.11 介绍一下你对浏览器内核的理解
- 1.12 title与h1的区别、b与strong的区别、i与em的区别
- 1.8display: none;与visibility: hidden;的区别
- 1.13 CSS和JS的位置会影响页面效率
- 1.14 对HTML5的理解
- 1.15 前端页面有哪三层
- 1.16 对web标准及w3c的理解
- 1.17 css3新增了哪些属性
- 1.18 form表单里面action的作用(form表单的属性)
- 1.19 src和href的区别
- 1.20 px、rpx、em、rem、vw的区别
- 1.22 table表格中合并行列
- 1.23 雪碧图以及它的优点;背景吸附
- 1.24什么是锚点
- 2.JavaScript
- 2、什么是ajax以及它的优缺点
- 3、json
- 4、数组
- 4.1 数组的增删改查
- 4.2 获取数组中最大值
- 4.3 遍历
- 4.4 排序,找出偶数,数组颠倒,去重
- 4.5 复制数组的方法
- 4.6 判断是否为数组
- 4.7 数组对象去重
- 5、call、bind、apply的区别
- 6、==与===的区别
- 7、null,undefined 的区别
- 8、如何解决跨域问题
- 9、dom
- 10、get与post的区别
- 11、原型与原型链
- 12、正则
- 13、谈谈document.ready和window.onload的区别
- 14、document.writer和innerHTML
- 15、用js实现一个事件监听,再用jq实现一个事件监听
- 16、sessionStorage,localStorage,cookie区别
- 16.1 localStorage和sessionStorage
- 17、 let/const/var的区别
- 18、深拷贝与浅拷贝
- 19、JavaScript有哪些方法定义对象
- 20、定时器
- 23、promise
- 24、贪婪模式和非贪婪模式的区别
- 25、回调函数
- 26、字符串与数字互相转换
- 27、字符串的方法
- 28、append与prepend
- 29、ajax、vue、react取数据
- 30、new操作符的作用
- 31、事件捕获与事件冒泡
- 31、js中对this关键字的理解
- 32、axios封装http请求
- 4、其他问题
- 5、面试日志清单
- 6、文字表达相关
- 1、输入URL到看到页面发生的全过程
- 2、http请求
- 3、什么是路由
- 4、前端开发有哪些优化问题
- 5、高质量的代码具备哪些条件
- 6、LESS和Sass之间的区别
- 7、es6有哪些新特性
- 8、什么是xml
- 9、栅格系统;媒体查询
- 10、浏览器的缓存机制
- 11、mvc与mvvm的区别
- 12、对模块化的理解
- 13、对前端工程师的理解
- 14、什么是面向对象
- 15、严格模式与混杂模式
- 16、Doctype作用是什么
- 17、什么是js闭包
- 7、计算题
- 8、小程序
- 1、小程序页面的生命周期
- 9、简历
- 10. 如何分盘
- 11.vue
- 1.0 生命周期及组件的生命周期
- 2.0 keep-alive
- 12.0 爬楼梯问题
