2013-05-06 100 views
0

我希望能夠在實例化新對象時設置新名稱。但不知何故,我發現了一個無限循環。我不知道如何解決它。如何使用Object.defineProperties中的存取器值設置默認值?

function Human(opt) { 
    this.name = opt.name; //this causes ranger error or infinite loop 
} 

Object.defineProperties(Human.prototype, { 
    name : { 
    set : function(val) { 
     if(name === 'Einstein') { 
     console.log('Hello Einstein'); 
     } 
     this.name = val; 
    }, 
    configurable : false 
    } 
}); 

回答

2

有沒有在你的代碼中沒有無限循環,但如果你改變了這個會有:

this.end = val; 

這樣:

this.name = val; 

(現在的問題更新爲使用this.name = val;

因爲它當然會調用th E再次set,並再次...

你需要的是像你.end屬性來存儲實際值,然後用get訪問從.end檢索值。

get: function() { return this.end }, 
+0

對不起。它應該是this.name – einstein 2013-05-06 14:47:02

+0

當我使用'new Human({name:'Einstein'})'我想'this.name'設置爲' – einstein 2013-05-06 14:49:45

+0

@ Woho87:我知道,但這就是導致循環的原因。如果你想使用'set'功能,你需要的是當'.name'被設置時,你的setter實際上將它設置爲一個不同的屬性。然後你爲'.name'設置一個'get',這樣當你詢問'.name'的值時,它就會從其他屬性中獲取它。 – 2013-05-06 14:51:15