關於類-需知知識點:
1、ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作爲對象的模板。通過class
關鍵字,可以定義類
基本上,ES6 的class
可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到,新的class
寫法只是讓對象原型的寫法更加清晰、更像面向對象編程的語法而已。
2、類的所有方法都定義在類的prototype
屬性上面。
3、ES6 的類,完全可以看作構造函數的另一種寫法。
class Point {
// ...
}
typeof Point // "function"
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
調用時constructo
r指向構造函數本身
。
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
默認指向undefined
,new
調用時target
指向Person
的實例對象。
var Person = function () { if (new.target === Person) { console.log('new調用'); } else { console.log('普通調用'); } } var p1 = new Person(); // new調用 var p2 = Person(); // 普通調用