天天看點

建立對象的安全模式

對于有些JavaScript的初學者來說,可能不太适應面向對象的寫法,經常容易忘記使用new關鍵字而導緻出錯。

其實,我們可以找為檢察官為我們實時監測。

首先,我們來看下問題所在吧!

function Person(name, age) {
    this.name = name;
    this.age  = age;
}
var person = Person('aa', 20);
console.log(person.name); // TypeError       

原因不難看出吧,Person是在作為一個函數在全局環境執行了,那麼this必然指向全局的對象,這裡為window,

即window.name為aa,window.age為20,但person對象是沒有的!

如何避免這種錯誤呢?我們可以使用建立對象的安全模式,首先監測是否為目前類的示例,

是的話說明使用了new關鍵字,正常執行就是了,否則傳回一個示例對象,再次為this進行指派操作,如下:

function Person(name, age) {
    if (this instanceof Person) {
        this.name = name;
        this.age  = age;
    }
    else {
        return new Person(name, age);
    }
}
var person = Person('aa', 20);
console.log(person.name); // aa 正常輸出