ES6面试题

1.箭头函数中的this指向定义时当前周围的作用域;

2.如果使用标记模板字面量,第一个参数的值总是字符串的数组。其余的参数获取的是传递的表达式的值;

3. es6中和原型一样用来继承的class和继承是怎么实现的?

贴上

 

class Point {
  // ...
}
typeof Point // "function",类的数据类型就是函数
Point === Point.prototype.constructor // true,类本身就指向构造函数

使用的时候,也是直接对类使用new命令,跟构造函数的用法完全一致,不使用new会报错。

类的所有方法都定义在类的prototype属性上面。

 

class Point {
  constructor() {    // ...  }
  toString() {    // ...  }
  toValue() {    // ...  }
}
// 等同于
Point.prototype = {
  constructor() {},
  toString() {},
  toValue() {},
};

//Object.assign方法可以很方便地一次向类添加多个方法
Object.assign(Point.prototype, {
  toString(){},
  toValue(){}
});

类不存在变量提升(hoist),这一点与 ES5 完全不同。

Class 可以通过extends关键字实现继承。

 

class ColorPoint extends Point {}//ColorPoint继承了Point类所有的属性和方法

super关键字,表示父类的构造函数,用来新建父类的this对象。

子类必须在constructor方法中调用super方法,否则新建实例时会报错,只有调用super之后,才可以使用this关键字。

区别:

ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面Parent.apply(this))。

ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this

Class 作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链。

(1)子类的_proto_属性,表示构造函数的继承,总是指向父类。

(2)子类prototype属性的_proto_属性,表示方法的继承,总是指向父类的prototype属性。

子类实例的__proto__属性的__proto__属性,指向父类实例的__proto__属性。也就是说,子类的原型的原型,是父类的原型。

Object.getPrototypeOf方法判断,一个类是否继承了另一个类。

4. es6中const、let、var之间的区别?

  1. var定义的变量,作用域是整个封闭函数,是全域的;

    let定义的变量,作用域是在块级或者字块中;

  2. 变量提升:不论通过var声明的变量处于当前作用于的第几行,都会提升到作用域的最顶部

    而let声明的变量不会在顶部初始化,凡是在let声明之前使用该变量都会报错(引用错误ReferenceError);

  3. 只要块级作用域内存在let,它所声明的变量就会

  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值