js使用defineProperty的一些坑

lonecloud發表於2017-08-31
var p2={

};
Object.defineProperty(p2,"gs",{
    get:function () {
        return this.gs;
    },
    set:function (gs) {
        this.gs=gs;
    }
})

寫了一段如上low的程式碼,然後再瀏覽器執行

alert(p2.gs);後瀏覽器報錯了

Uncaught RangeError: Maximum call stack size exceeded

 錯誤詳情:

由於在js中

呼叫的是由於其p2.gs呼叫的其實是gs.get方法,由於在函式內部this.gs呼叫的還是gs.get方法,導致其一直在迴圈呼叫,最後堆疊報錯了

解決辦法:

var p2={
    _gs:123
};
Object.defineProperty(p2,"gs",{
    get:function () {
        return this._gs;
    },
    set:function (gs) {
        this._gs=gs;
    }
})

  

 

 

相關文章