>>面试总结 面向对象好处: 扩展好,继承好 #递归 函数自己调用自己 #数组扁平化 将二维及多维数组转成一维数组 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,函数本身也是个对象 -拷贝继承 -深拷贝继承 -浅拷贝继承 -闭包 闭包的概念:闭包就是能够读取其他函数内部变量的函数;也可理解为闭包是定义在一个函数内部的函数;同时闭包本质是函数内部和函数外部链接起来的桥梁。 私有的方法和变量避免造成全局污染,缺点是容易造成内存泄漏