第一種 Object.defineProperty
這種是在vue源碼中看見的
let obj = {
$data: {}
};
Object.defineProperty(obj, '$data', {
get() {
return this;
},
set() {
return console.warn('只讀屬性不能修改');
}
})
第二種使用閉包實現
使用場景:團隊協作開發的時候,沒有詳細的文檔規范,防止隊友誤操作。
const Ds = (function () {
const obj = {
$data: {
a:1
}
}
class Ds {
get() {
return obj;
}
}
return new Ds();
})()
console.log(Ds.get());
console.log(Ds.obj); // undefind
demo地址: js實現屬性只讀