練習用的 REPL。
let defaultOwner = {firstName: "Martin", lastName: "Fowler"};
let spaceshipOwner = defaultOwner; // 只要有人這樣使用
defaultOwner.firstName = "Rebecca"; // 就會意外改到變數內容
defaultOwner.lastName = "Parsons";
把直接存取的邏輯封裝起來。
let defaultOwner = {firstName: "Martin", lastName: "Fowler"};
function getDefaultOwner() {return defaultOwner;}
function setDefaultOwner(arg) {defaultOwner = arg;}
// 呼叫端就可以這樣用
spaceshipOwner = getDefaultOwner();
setDefaultOwner({firstName: "Rebecca", lastName: "Parsons"});
除了單純封裝之外,還可以做的更多。
// 把程式挪到另外獨立檔案,然後後只 export 存取方法出來
let defaultOwner = {firstName: "Martin", lastName: "Fowler"};
export function getDefaultOwner() {return defaultOwner;}
export function setDefaultOwner(arg) {defaultOwner = arg;}
// 改個名字
let defaultOwnerData = {firstName: "Martin", lastName: "Fowler"};
export function defaultOwner() {return defaultOwnerData;}
export function setDefaultOwner(arg) {defaultOwnerData = arg;}
// 回傳新的物件
let defaultOwnerData = {firstName: "Martin", lastName: "Fowler"};
export function defaultOwner() {return Object.assign({}, defaultOwnerData);}
export function setDefaultOwner(arg) {defaultOwnerData = arg;}
// 沒有 setter,任何嘗試修改內容會出錯
let defaultOwnerData = {firstName: "Martin", lastName: "Fowler"};
export function defaultOwner() {return new Person(defaultOwnerData);}
export function setDefaultOwner(arg) {defaultOwnerData = arg;}
class Person {
constructor(data) {
this._lastName = data.lastName;
this._firstName = data.firstName
}
get lastName() {return this._lastName;}
get firstName() {return this._firstName;}
// and so on for other properties
}