JS 面試題: 將class轉爲function

 關於類-需知知識點:

  1、ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作爲對象的模板。通過class關鍵字,可以定義類

  基本上,ES6 的class可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到,新的class寫法只是讓對象原型的寫法更加清晰、更像面向對象編程的語法而已。

  2、類的所有方法都定義在類的prototype屬性上面。

  3、ES6 的類,完全可以看作構造函數的另一種寫法。

  1. class Point {
  2. // ...
  3. }
  4. typeof Point // "function"
  5. Point === Point.prototype.constructor // true

關於new-需知知識點:

  1、通過use strict普通調用時嚴格模式this指向undefined,賦值操作會報錯,new調用時this指向實例對象。

var Person = function () {
  'use strict';
  try {
    this.name = 'BabyChin';
    console.log('new調用');
  } catch (e) {
    console.log('普通調用');
  }
}
var p1 = new Person(); // new調用
var p2 = Person(); // 普通調用

  2、通過instanceof普通調用時this指向全局對象new調用時this指向實例對象

var Person = function () {
  if (this instanceof Person) {
    console.log('new調用');
  } else {
    console.log('普通調用');
  }
}
var p1 = new Person(); // new調用
var p2 = Person(); // 普通調用

  3、通過constructor普通調用時constructor指向全局對象new調用時constructor指向構造函數本身

var Person = function () {
  if (this.constructor === Person) {
    console.log('new調用');
  } else {
    console.log('普通調用');
  }
}
var p1 = new Person(); // new調用
var p2 = Person(); // 普通調用

  4、通過new.target普通調用時target默認指向undefinednew調用時target指向Person的實例對象。

var Person = function () {
  if (new.target === Person) {
    console.log('new調用');
  } else {
    console.log('普通調用');
  }
}
var p1 = new Person(); // new調用
var p2 = Person(); // 普通調用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章