javascript - 在使用工厂函数创建的对象的属性中切换 true 或 false
问题描述
我曾经有这个构造函数和一个可以在真假之间切换 object.status 的原型。这里:
function Book(title, author, length, status){
this.title = title;
this.author = author;
this.length = length;
this.status = status;
}
Book.prototype.toggleStatus = function (){
this.status = !this.status;
}
现在我想在工厂函数中创建原型。据我所知,这是:
const Book = function (title, author, length, status) {
const toggleStatus = () => status = !status
return {title, author, length, status, toggleStatus}
如果我调用 someObject.toggleStatus() 我在日志上收到反转的布尔状态,但它不会改变对象本身的 kvp 上的值,这是我的最终目标。如果可能的话,我希望使用原型制作。
解决方案
让处理程序重新分配返回对象的属性:
const Book = function (title, author, length, status) {
const book = { title, author, length, status, toggleStatus: () => book.status = !book.status };
return book;
};
另一个更接近于在闭包内重新分配变量名称的原始代码的选项(更奇怪)是制作status
一个吸气剂:
const Book = function (title, author, length, status) {
return {
title,
author,
length,
get status() {
return status;
},
// add a setter too if needed
toggleStatus: () => status = !status
};
};
如果除了工厂函数之外还想使用原型,请使用Object.create
从原型创建实例:
const Book = function (title, author, length, status) {
const b = Object.create(bookProto);
return Object.assign(b, { title, author, length, status });
};
const bookProto = {
toggleStatus() {
this.status = !this.status;
}
};
const b = Book('title', 'author', 7, true);
console.log(b.status);
b.toggleStatus();
console.log(b.status);
b.toggleStatus();
console.log(b.status);
b.toggleStatus();
推荐阅读
- reactjs - React 放置辅助函数的最佳实践
- android - 如何处理调试和生产 Android 应用程序的 MSAL 配置?
- azure - 如何在 Azure Devops 中为 Azure 创建服务连接(附图)
- r - R 中的 agnes() 如何处理因子列?
- javascript - 我的嵌套循环无法遍历对象数组
- android - 使用触摸事件进行自定义视图而不干扰用户的触摸事件
- python - 使用 Pandas 计算某些列/条目的统计信息?
- python - GEKKO 补料分批生物反应器的 ODE 方程组不可行系统
- python - Python计算数据框列中值的出现次数
- php - Laravel 5.7 分页