【前端开发】】面试专题梳理总结

>>面试总结
面向对象好处:
扩展好,继承好
#递归
函数自己调用自己

#数组扁平化 将二维及多维数组转成一维数组
let arr1=[1,2,3,4,[8,9,7,[11,22]],22,11];
console.log(arr1.flat(Infinity)) //Infinity 无穷

let arr2 = [1,2,{x:1,y:2},3];
console.log(arr2.flat(Infinity))
手写一个多维数组转一维数组的方法
function flat(items){
    let newArr = [];
    items.foEach(item =>{
        newArr.push(item);
        if(Array.isArray(item.children)){
            newArr = newArr.concat(flat(item.children)); //重复调用自己函数 递归
        }
    })
    return newArr;
}
#面试总结下
##继承
es5和es6有何区别
es6给我们实现了类;
es5只能拿函数去模拟类;
// _proto_对象的原型链 实例化对象才有的
// prototype 构造函数的原型 构造函数才有的
//关系是:实例化对象的_proto_指向构造函数的prototype,函数本身也是个对象。
##构造函数的作用:将私有的属性和方法加到实例化对象上;
如下构造函数:
function Person(name,age){
    this.name = name;
    this.age = age;
}
var leo = new Person("leo",41);

js中的继承
###-构造函数的继承如下 call apply
call 
父函数名字.call(this,参数1,参数2)
apply
父函数名字.apply(this.arguments/参数数组格式)
function Person2(name,age,skill){
    Person.call(this,name,age)
    this.skill = skill
}
var zm = Person2("zhangsan",21,"喜欢敲代码")
-原型链继承
原型链概念:当我们在调用对象的属性和方法时,如果对象没有这个方法,就去原型链里找
 // _proto_对象的原型链 实例化对象才有的
 // prototype 构造函数的原型 构造函数才有的
 //关系是:实例化对象的_proto_指向构造函数的prototype,函数本身也是个对象

 -拷贝继承
   -深拷贝继承
   -浅拷贝继承
-闭包
闭包的概念:闭包就是能够读取其他函数内部变量的函数;也可理解为闭包是定义在一个函数内部的函数;同时闭包本质是函数内部和函数外部链接起来的桥梁。
私有的方法和变量避免造成全局污染,缺点是容易造成内存泄漏
原文地址:https://www.cnblogs.com/xiaohuizhang/p/11721549.html