在學習Vue的時候咱們知道它的響應式數據原理就是經過Object.defineProperty進行重寫定義的,主要是利用get和set屬性訪問器實現的,接下來看看get和set屬性訪問器的實現原理java
js容許在運行時向對象添加狀態,而且能夠添加行爲。爲了提升抽象能力,js的屬性被設計成了更加複雜的形式,它提提供了兩類屬性getter/setter,做爲其數據屬性和訪問器屬性。也能夠簡單的理解爲,getter 是一種得到屬性值的方法,setter是一種設置屬性值的方法。函數
class Person { constructor(name,age) { this.name = name; this.age = age; } set name(name) { console.log("setter"); this.name = name; } get name() { console.log("getter"); return this.name; } }
Object.defineProperty(obj,prop, descriptor)學習
參數:this
可供定義的特性列表:spa
var lost = { loc : "Island" }; Object.defineProperty(lost, "location", { get : function () { return this.loc; }, set : function (val) { this.loc = val; } });