2013-03-10 23 views
0

我正在學習OOP的基本知識,在JavaScript中,我有這個例子的一些問題:JavaScript對象的DefineProperties和最大

var Human = function (first, surname) { 
    var x = {}; 
    Object.defineProperties(x, { 
     first: { 
      get: function() { 
       return this.first; 
      }, 
      set: function (value) { 
       this.first = value; 
      } 
     }, 
     surname: { 
      get: function() { 
       return this.surname; 
      }, 
      set: function (value) { 
       this.surname = value; 
      } 
     } 
    }); 
    return x; 
}; 
var alex = new Human("Alex", "Corlette"); 
  1. 此:console.log(alex);輸出:

    { }

  2. 而這個:console.log(alex.first);輸出:

    Uncaught RangeError: Maximum call stack size exceeded

任何人都知道我在做什麼錯了?

回答

7

問題是範圍。既然你定義了一個屬性,並且在getter和setter中引用了那些相同的getter和setter。

該示例可以通過刪除此關鍵字來解決。

var Human = function (first, surname) { 
    var x = {}; 
    Object.defineProperties(x, { 
    first: { 
     get: function() { 
      return first; 
     }, 
     set: function (value) { 
      first = value; 
     } 
    }, 
    surname: { 
     get: function() { 
      return surname; 
     }, 
     set: function (value) { 
      surname = value; 
     } 
    } 
    }); 
    return x; 
}; 
var alex = new Human("Alex", "Corlette");