2017-01-12 119 views
0

我已經看到了在模塊模式中實現getters/setter的兩種不同方式。一個使用「defineProperty」,而另一個不使用。一個與另一個的優點/缺點是什麼?模塊模式中get/set和Object.defineProperty之間的區別

var MyModule = (function() { 

    var _val; 

    var api = { 
    get value1() { 
     return _val 
    }, 
    set value1(value) { 
     _val = value 
    } 
    }; 

    Object.defineProperty(api, 'value2', { 
    get: function() { 
     return _val; 
    }, 
    set: function(value) { 
     _val = value 
    } 
    }); 
    return api; 

}()); 

https://plnkr.co/edit/TbJSD4noZTew8II83eTH?p=preview

回答

2

使用getter syntax創建之前ES2015,你必須知道的名字在那你在寫代碼的時間,這,一個屬性。

Object.defineProperty允許您執行與上述相同的操作,但即使在ES2015之前,也不需要您知道高級屬性的名稱。它還允許您決定該屬性是可配置的,可枚舉的還是可寫的,這是使用get/set語法無法實現的。

要回答您的確切問題:兩者都不是更好。他們適合不同的情況。 get/set語法的讀寫更簡單,但不如Object.defineProperty那麼強大。

相關問題