web面试题?es6扩展题?必问?

1.说⼀下箭头函数与普通函数的区别?

在 es6 中,提供了⼀种简洁的函数写法,我们称作“箭头函数”。
写法:函数名=(形参)=>{……} 当函数体中只有⼀个表达式时,{}和 return 可以省略,当函数体中形
参只有⼀个时,()可以省略。
特点:箭头函数中的 this 始终指向箭头函数定义时的离 this 最近的⼀个函数,如果没有最近的函数
就指向 window。
可以这么理解:箭头函数没有 this 他的 this 用的是所在环境的 this
区别:

  1. 箭头函数不能⽤于构造函数,不能使⽤ new** ⽽普通函数可以
  2. 在普通函数中,this 总是指向调⽤它的对象,如果⽤作构造函数,this 指向创建的对象实例,
    ⽽箭头函数指向箭头函数定义时的离 this 最近的⼀个函数,如果没有最近的函数就指向
    window。

2.说⼀下 for in 与 for of 的区别?

For in 可以遍历对象 ⽽ for of 遍历对象会报错

  • for in 遍历数组得到的数组的下表 ⽽ for of 遍历得到的时候数组⾥⾯的每⼀个元素

3.es5 的面向对象和 es6 的面向对象?

es5 的面向对象是通过 new 一个构造函数实现的
es6 的面向对象是通过 class 实现的 es6 的 class 就是面向对象的语法糖(实现同样的功能 但是代码更少 更加简洁)

面向对象是一个概念或者编程思想,面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式

(在 js 中一切皆对象
比如说数组 object number string 等等 这些都是内置对象

那么怎么自定义对象
es5 的时候没有像后台语言一样的 class 这个概念 所以我们用函数当作构造函数来创建对象)

4.说说 new 操作符具体⼲了什么?

答:在 JavaScript 中, new 操作符⽤于创建⼀个给定构造函数的实例对象
new 的实例可以访问构造函数函数里的属性
也能访问 原型上的方法

创建⼀个新的对象 obj
将对象与构建函数通过原型链连接起来
将构建函数中的 this 绑定到新建的对象 obj 上
根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理

5.说⼀下 JavaScript 原型,原型链的理解?

  1. prototype 显式原型
    每个函数都有一个 prototype 属性,被称为显式原型,里面包含了这个构造函数公共的方法
  2. _ proto 隐式原型
    每个实例对象都会有_ proto 属性,其被称为隐式原型
    每一个实例对象的隐式原型
    proto _属性指向自身构造函数的显式原型 prototype
  3. constructor
    每个 prototype 原型都有一个 constructor 属性,指向它关联的构造函数。
  4. 原型链
    获取对象属性或者方法的时候,如果对象本身没有这个属性,那就会去他的原型_ proto 上去找,如果还查不到,就去找原型的原型,一直找到最顶层(Object.prototype)为止。Object.prototype 对象也有 proto _属性值为 null。

6.Javascript 如何实现继承?

答:JS 继承实现⽅式也很多,主要分 ES5 和 ES6 继承的实现

  1. 先说⼀下 ES5 是如何实现继承的
    ES5 实现继承主要是基于 prototype 来实现的,具体有三种⽅法
    ⼀是实例继承:即 B.prototype=new A() 让 b 的原型等于 a 的实例

    ⼆是借⽤构造函数继承(call 或者 apply 的⽅式继承)
    function B(name,age) {
    A.call(ths,name,age)
    }
    三是组合继承
    组合继承是结合第⼀种和第⼆种⽅式

  2. 再说⼀下 ES6 是如何实现继承的
    ES6 继承是⽬前⽐较新,并且主流的继承⽅式,⽤ class 定义类,⽤ extends 继承类,⽤ super()表示
    ⽗类,【下⾯代码部分只是熟悉,不⽤说课】
    例如:创建 A 类
    class A {
    constructor() {
    //构造器代码,new 时⾃动执⾏
    }
    ⽅法 1( ) { //A 类的⽅法 }
    ⽅法 2( ) { //A 类的⽅法 }

    创建 B 类并继承 A 类
    class B extends A {
    constructor() {
    super() //表示⽗类
    }
    }
    实例化 B 类: var b1=new B( )
    b1.⽅法 1( )

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.箭头函数中的this指向定义时当前周围的作用域; 2.如果使用标记模板字面量,第一个参数的值总是字符串的数组。...
    逸軒阅读 698评论 0 1
  • 1.ES6中的let关键字和val关键字声明变量的区别 var关键字是原生JS中声明变量的关键字,let关键字是E...
    前端推土机阅读 3,262评论 0 6
  • 前端面试题整理—ES6篇 转自https://www.cnblogs.com/theblogs/p/1057584...
    zhcnnet阅读 894评论 0 11
  • 1、es5和es6的区别,说一下你所知道的es6ECMAScript5,即ES5,是ECMAScript的第五次修...
    猴逃逃阅读 5,239评论 0 1
  • ES6有哪些新特性?不一样的变量声明:const和let模板字符串( `` )箭头函数(Arrow Functio...
    Drazy嘀嘀嘀阅读 395评论 0 1