JavaScript高频八股

张开发
2026/4/5 23:12:56 15 分钟阅读

分享文章

JavaScript高频八股
一、原型和原型链1、概念每个对象都有一个隐藏的属性__proto__原型指向它创建时的构造函数的prototype原型对象。当访问对象的一个属性或方法时如果对象本身没有就会去它的__proto__上找如果还没有就继续往上直到null原型链的终点。这个查找的链条就是原型链。2、核心概念prototype显式原型函数独有的属性。当你定义一个函数时它会自动获得一个prototype属性这个属性是一个对象用来存放所有由该函数构造出来的实例共享的属性和方法。__proto__隐式原型对象独有的属性。每个对象包括函数对象都有一个__proto__属性它指向创建这个对象的构造函数的prototype。constructor构造器每个prototype对象都有一个constructor属性指向它关联的构造函数。3、回答要点原型是 JS 实现继承的机制通过__proto__将对象串联起来。函数有prototype实例对象有__proto__实例的__proto__指向构造函数的prototype。原型链的终点是null。属性查找是向上追溯的这就是原型链的意义。实际开发中我们可以利用原型链来挂载共享方法节省内存也可以通过hasOwnProperty来区分自身和继承属性。同时要注意性能问题避免在原型链上查找太深。4、画原型链要点1引用类型都是对象每个对象都有原型对象。2对象都是由构造函数创建对象的__proto__属性指向其原型对象构造函数的prototype属性指向其创建的对象实例的原型对象所以对象的__proto__属性等于创建它的构造函数的prototype属性。3所有通过字面量表示法创建的普通对象的构造函数为Object4所有原型对象都是普通对象构造函数为Object5所有构造函数的构造函数是Function6Object.prototype没有原型对象所以Object.prototype._proto_null最后对原生构造函数Object和Function下手// 原生构造函数也是函数对象其构造函数为FunctionObject.__proto__ Function.prototype// 特例Function.__proto__ Function.prototype二、JS手撕1.数组扁平化概念把多层嵌套的数组数组套数组拍平成一层的数组例子// 原始数组嵌套了多层 const nested [1, [2, 3], [4, [5, 6]]]; // 扁平化后变成一层 const flat [1, 2, 3, 4, 5, 6];递归法其中arr[i]instanceofArray判断数组元素是不是数组concat是 JS 数组的方法用来把两个或多个数组合并成一个新数组function flatten(arr) { let result []; for (let i 0; i arr.length; i) { if (arr[i] instanceof Array) { // 是数组递归拍平然后合并 result result.concat(flatten(arr[i])); } else { // 不是数组直接添加 result.push(arr[i]); } } return result; }三、this指向四、foreach map区别

更多文章