[英]Default value for options object in class constructor
我創建了一個類,我想為用戶不提供任何參數的情況設置一些值的默認選項。 我最近從一個帶有多個參數的構造函數轉到了一個對象,因為我相信當用戶創建一個新的類實例時它有助於提高可讀性。
以下是我之前的做法:
module.exports = class User {
constructor(name = "Joe", age = 47) {
this.name = name;
this.age = age;
}
}
const User = require("./user");
const user = new User(); // Defaults to "Joe" and 47
實際上,我的班級有更多的參數,使用它時的可讀性變得很難。 所以為了解決這個問題,我切換到一個工作得更好的選項對象,但我似乎無法設置默認值。 當我嘗試使用this.name
它會說this.name = options.name || "Joe" Cannot read property 'name' of undefined
this.name = options.name || "Joe" Cannot read property 'name' of undefined
即使我認為我將默認值設置為“Joe”
我現在就是這樣做的:
module.exports = class User {
constructor(options) {
this.name = options.name || "Joe";
this.age = options.age || 47;
}
}
const User = require("./user");
const user = new User();
確保對象本身有默認值。
module.exports = class User {
constructor(options) {
options = options || {}
this.name = options.name || "Joe";
this.age = options.age || 47;
}
}
您可以為選項設置默認值,即{}
。
class User {
constructor(options = {}) {
this.name = options.name || "Joe";
this.age = options.age || 47;
}
}
或首先檢查options
是否真實,然后訪問該值。
class User {
constructor(options) {
this.name = options && options.name || "Joe";
this.age = options && options.age || 47;
}
}
你實際上只需要一個oneliner:
const defaultUser = {
name: "Joe",
age: 47
};
module.exports = class User {
constructor(options) {
Object.assign(this, defaultUser, options)
}
}
如果要更改為配置模式,仍可以保留默認參數語法:
module.exports = class User {
constructor({ name = "Joe", age = 47 } = {}) {
this.name = name;
this.age = age;
}
}
const User = require("./user");
const user = new User(); // Defaults to "Joe" and 47
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.