1. this指向的9个规则
之前的文章中 有写this指向问题,这次是细化,看看this具体会指向哪里,面试常考!!!
函数的上下文由调用函数的方式决定。
规则1:
函数不调用,不能确定this指向谁。
规则2:
对象调用函数,this就指向这个对象。
对象名.函数名();
规则3:
圆括号直接调用函数,this指向window对象
函数名();
规则4:
数组或者类数组对象调用函数,this指向这个数组或者类数组对象
数组(类数组)名[下标]();
规则5:
IIFE中的函数,this指向window对象
(function (){
})();
规则6:
定时器、延时器调用函数,this指向window对象
setTimeout(函数,时间);
setInterval(函数,时间);
规则7:
事件监听函数的this是绑定事件的DOM元素
DOM元素.onclick = function () {
};
规则8:
call和apply方法能指定上下文
call(this,...其他参数);
apply(this,...其他参数);
规则9:
用new调用函数,this指向秘密创建的对象
2. 用new操作符调用函数的步骤
1)、函数体内会自动创建出一个空对象
2)、函数的上下文(this)指向这个对象
3)、执行函数体内的语句
4)、即使没有return语句,函数也会自动返回上下文对象
3. call和apply方法的区别
call和apply可以改变this指向。
区别:传参形式不同。
call():第一个参数是this指向,其余参数必须用逗号逐个列举出来;
apply():第一个参数是this指向,其余参数写到数组中;
4.DOM动态获取元素的方法有什么区别
querySelectorAll()、getElementsByClassName()、getElementsByTagName()方法返回的值都是一组数据,三者有什么区别?
区别一:参数不同
querySelectorAll()方法的参数是css选择器;
getElementsByClassName()方法的参数只能是类名;
getElementsByTagName()方法的参数只能是标签名。
区别二:动态获取
getElementsByClassName()方法和getElementsByTagName()方法在页面上增加或者删除元素时,获取的元素个数可以改变。而querySelectorAll()方法就做不到。