new关键字四个工作流程:
1.创建一个空对象
2.将this指向这个对象
3.给对象赋值
4.返回这个对象
构造函数、原型对象、实例对象三者关系:
1.prototype是构造函数的属性,通过构造函数名.prototype可以得到它的原型对象.
2.constructor是原型对象的属性,通过原型对象.constructor可以知道自己是被哪个构造函数创建的.
3.__proto__是实例对象的属性,通过实例对象.__proto__可以让实例对象访问原型对象中的成员(但是在开发中一般不这样使用,因为不符合ECMA标准语法,有些浏览器不支持,开发直接省略即可)
js语言是通过什么技术实现面向对象继承的:
原型链
原型链终点是什么:
null
this三种指向:
1.全局函数: 函数名() 的this指向window
2.对象的方法: 对象名.方法名() 的this指向对象
3.构造函数:new 函数名() 的this指向new创建的实例对象
call、apply、bind异同点:
相同点:都是用来修改this指向的
不同点:
(1)传参机制不同:call是一一传参;apply是数组/伪数组经过遍历逐一传参
(2)执行机制不同:call,apply是立即调用函数;bind是得到一个更新this指向的新函数,不会立即调用函数
闭包:
JavaScript高级程序设计(第四版)中,闭包指的是那些引用了另一个函数作用域中变量的函数.
MDN中,一个函数和上下文引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包.
递归:
递归函数是函数内部调用自己
递归函数的应用场景:
(1)浅拷贝转成深拷贝
(2)遍历dom树
数组几个常用的迭代方法(遍历方法):
map遍历:映射数组
filter遍历:过滤数组
forEach遍历:遍历数组
some遍历:判断数组中是否有满足条件的元素
every遍历:判断数组中所有的元素是否都符合条件
findIndex方法:获取某个元素下标
数组reduce方法:给每一个元素执行一次回调