在面向對象的類C語言如Java語言中,咱們使用構造函數是實例化對象的過程,在JavaScript語言中咱們能夠使用構造函數的方式建立對象,如:javascript
let obj = new LanguageFun("javaScript")
與面向對象的語言不一樣,JavaScript使用構造函數建立對象不是真正意義上的實例化,而是經過new操做符調用的構造函數。java
構造函數的執行過程:函數
包括咱們知道的內置函數Number(), String()均可以使用new操做符建立新的對象,這種函數在JavaScript中稱爲構造函數的調用。咱們能夠經過實例理解這個過程:測試
function LanguageFun(name){ this.name = name this.sayHello = function(){ console.log("Hello , ",this.name) } } let obj = new LanguageFun("javaScript") obj.sayHello(); // Hello , javaScript
new LanguageFun()執行過程:this
測試:prototype
console.log(obj.__proto__ === LanguageFun.prototype); //true
當咱們使用new操做符調用構造函數的時候沒有問題,可是有時候咱們會忘記使用new操做符,使用了普通函數的調用方式,產生異常,因此咱們須要對JavaScript的構造函數進行兼容改造。code
function LanguageFun(name){ if(!(this instanceof LanguageFun)) { return new LanguageFun(name) } this.name = name this.sayHello = function(){ console.log("Hello , ",this.name) } } let obj1 = new LanguageFun("javaScript") let obj2 = LanguageFun("javaScript") obj1.sayHello(); // Hello , javaScript obj2.sayHello(); // Hello , javaScript