首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何修复这个Date类,使其在创建新的date实例时不能在启动后更改?

要修复Date类,使其在创建新的date实例后不能更改,可以使用以下方法:

  1. 使用闭包:通过使用闭包,将Date类的属性封装在一个函数内部,外部无法直接访问和修改这些属性。只能通过提供的接口来创建新的date实例。
代码语言:txt
复制
function FixedDate() {
  var date = new Date();

  this.getDate = function() {
    return new Date(date);
  };
}

var fixedDate = new FixedDate();
console.log(fixedDate.getDate()); // 当前时间

// 尝试修改date实例
fixedDate.date = new Date(2022, 0, 1);
console.log(fixedDate.getDate()); // 仍然是当前时间
  1. 使用ES6的类和Symbol:通过使用Symbol来创建一个私有属性,外部无法直接访问和修改这个属性。只能通过提供的接口来创建新的date实例。
代码语言:txt
复制
const fixedDate = (() => {
  const date = Symbol('date');

  return class FixedDate {
    constructor() {
      this[date] = new Date();
    }

    getDate() {
      return new Date(this[date]);
    }
  };
})();

const instance = new fixedDate();
console.log(instance.getDate()); // 当前时间

// 尝试修改date实例
instance[date] = new Date(2022, 0, 1);
console.log(instance.getDate()); // 仍然是当前时间

这两种方法都可以确保在创建新的date实例后,无法直接修改实例的日期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

架构之路 (七) —— iOS AppSOLID原则(一)

目前,您应用所有都直接使用 ExpenseModel。您不能在不定义持久容器情况下创建此类实例。最好将与 Core Data 设置和预览相关属性组合在一起。...当您在一处编辑名称,Xcode 会更改它出现其他任何地方,包括文件名。 完成名称编辑,单击右上角Rename。...现在,您需要更改使用 ExpenseModel 代码实例以使用协议。...Missing override: Please override this method in the subclass") } } 注意:由于您删除了 Core Data,因此每个报告阅读器实例创建都将拥有自己数据快照...它现在可以自由使用任何类型存储,只需对您代码进行最少更改。 3) 添加报告类型是枚举中添加问题。 4) 创建预览和测试比以前容易得多,而且您不再需要任何复杂模拟对象。

4.7K10

【白话设计模式】去哪儿网一面:工厂方法模式

优缺点 定义 工厂方法模式是一种创建型设计模式, 其中提供一个创建对象方法, 允许子类决定实例化对象类型。...如果代码其余部分与现有已经存在耦合关系, 那么向程序中添加其实并没有那么容易。 代码问题该如何处理呢?目前, 大部分代码都与 卡车相关。程序中添加 轮船需要修改全部代码。...应用场景 无法预知对象确切类别及其依赖关系 工厂方法将创建产品代码与实际使用产品代码分离, 从而能在不影响其他代码情况下扩展产品创建部分代码。...但是不要担心, 我们很快就会修复这个问题。 现在, 为工厂方法中每种产品编写一个创建者子类, 然后子类中重写工厂方法, 并将基本方法中相关创建代码移动到工厂方法中。...无需更改现有客户端代码, 你就可以程序中引入产品类型。 应用工厂方法模式需要引入许多子类, 代码可能会因此变得更复杂。最好情况是将该模式引入创建现有层次结构中。

32920
  • 祖传shi山代码重构实战(01)-Extract Class提炼

    给某个添加一项责任,你会觉得不值得为这项责任分离出一个单独。于是,随着责任不断增加,这个会变得过分复杂。很快,你变成一团乱麻。这样往往含有大量函数和数据,太大而不易理解。...若旧剩下责任与旧名称不符,为旧改名 构造旧创建一个实例,建立“从旧访问连接关系 对你想搬移每个字段,运用【搬移字段】搬移之。每次更改运行测试。...使用【搬移函数】将必要函数搬移到。先搬移较低层函数(也就是“被其他函数调用”多于“调用其他 函数”者)。每次更改运行测试。...检查两个接口,去掉不再需要函数,必要为函数重新取一个适合环境名字。 决定是否公开。...此外,如果同个TelephoneNumber对象被传递给多个用户,也可能在用户之间造成别名问题 电话号码”对象一般还具有复用价值,因此我考虑将提炼暴露给更多客户端。

    47930

    什么是面向对象编程?OOP 深入解释

    这个函数只对 type 对象有帮助Car,所以我们Car中声明它,从而使它成为一个方法。 模板用作创建单个对象蓝图。...对象是使用特定数据创建实例。例如,在下面的代码片段中,Rufus是一个实例Dog。...该方法代码定义中定义。 当实例化单个对象,这些对象可以调用中定义方法。在下面的代码片段中,bark方法是Dog中定义,bark()方法是Rufus对象上调用。...Dog出勤属性对于月底为所有者开具账单很重要。 方法是程序员提高可重用性并将功能封装在对象中方式。这种可重用性调试是一个很大好处。如果有错误,只有一个地方可以找到并修复它,而不是很多。...通过仅显示选定数据片段并仅允许通过访问数据和通过方法修改数据,我们可以保护数据免于暴露。继续以汽车为例,您在开车希望打开油箱。

    82710

    C++和对象(上)

    ,专注于如何高效、迅速解决问题 面向对象 面向对象关注是解决间各对象间关系 实例化一个洗衣对象 将衣服交给此对象 等待程序解决问题 可以看到,面向对象思想中,存在人、衣服、洗衣机等对象,...封装,这也是和对象主要研究对象 ️基本形式 要想拥有对象,就得先有定义形式类似于C语言中结构体,当然C++中结构体也可以用来定义,但我们一般这样做,而是通过一个关键字class.../上述变量都被称为成员变量,简称为 成员 注意: 定义成员变量和成员函数,不讲究定义位置,也就是说,即使成员变量定义成员函数之下,成员函数也能正常调用 ️实例化及调用 当我们拥有一个正常...,就可以通过实例方式创建对象 //假设已经写了上面的 //…… int main() { Date d1; //实例化出对象 d1,实际d1值为 1970 1 1 return 0; } 我们可以通过...,最后还知道了 this 指针存在,体验到了和对象巧妙用法;在下一篇文章中,我们将会学习各种默认成员函数,看看当初祖师爷设计都出现了哪些问题,后续是如何解决问题,以及中更为有趣成员函数

    13810

    第15篇-使用Django进行ElasticSearch简单方法

    项目,您需要创建一个将要使用模型。...Meta内部,您告诉ElasticSearch您希望索引被命名为什么。这将是ElasticSearch参考点,以便当在数据库中初始化索引并保存每个创建对象实例,它知道要处理索引。...你可能在想。实际上,它并不那么复杂。 因为只要在我们模型中进行某些更改,您就只想进行批量索引 init() 编制,因此可以将其映射到ElasticSearch中模型。...'现在,该 post_save 信号已在Django中注册,并且随时可以保存博客文章收听。...现在,您已成功将所有实例索引到ElasticSearch中,创建了一个 post_save 对每个保存实例进行索引信号,并创建了一个函数来搜索我们ElasticSearch数据库中数据。

    5.3K00

    Power Query 真经 - 第 4 章 - Excel 和 Power BI 之间迁移查询

    当用户把整个查询链复制到一个解决方案中(或者至少是一个包含这个查询链任何部分解决方案),这个方法非常有效。但是,如果链一部分已经存在了呢,会发生什么?...图 4-17 为什么 “Date” 列所有的值都显示为 “Error” 阅读错误信息,可以看到该列正试图将 “43131” 设置为一个日期。但是这个数字是怎么来呢?...在这里看到是 Power BI 文件中创建表,这是从 Excel 中复制数据结果。有趣是,它Date” 列中包含日期,而是包含一列数值,如图 4-18 所示。...这个表完全包含在 Power BI 中,如果需要对源数据做任何更改,必须在这里更新(【刷新】,对 Excel 文件更新不会流入该文件)。...图 4-20 “Date” 列数据正常显示 记住,如第 3 章数据类型和错误中所述,一旦更改了数据类型,任何后续更改都将基于这个输出。

    7.7K20

    Zipline 3.0 中文文档(三)

    根据有序资产创建调整,而不是根据资产集合中位置创建调整(1547) 修复当用户查询asof_date,blaze 管道查询问题(1608) 应将日期时间转换为 UTC。...修复了PerformancePeriod创建Account错误报告总持仓价值问题(950)。...管道是一个工具,允许你一个资产宇宙和一段时间内定义计算。过去,你只能在美国股票市场上运行管道。现在,你可以指定一个域,在这个域上应该计算管道。...之前,调整是根据资产集合中恰好出现位置而不是使用有序资产来创建估计(1547) 修复了当用户查询asof_date对 blaze pipeline 查询修复(1608) 日期时间应以...修复了PerformancePeriod创建Account错误报告总持仓价值问题(950)。

    62120

    实战:应用对持久数据访问| 从开发角度看应用架构9

    大魏这个,在被生成对象,会从数据库表中读数据,然后可能会对数据修改,修改这些数据,会存到持久性上下文中(运行在内存中),默写情况下,会被存回数据库表中(例如提交)。...//Setter methods } 四、实体四种状态 实体四种类型: New State: 使用Java运算符创建实体实例处于状态或瞬态状态。...当对管理实体字段中数据进行更改时,它将与数据库表数据同步。 应用程序调用实体管理器持久性,查找或合并方法,实体实例处于受管状态。...javax.persistence.EntityManager API用于创建实体实例,通过主键查找实体实例,通过实体实例进行查询以及删除现有的实体实例。...JPA提供程序启动使用JNDI查找服务按名称查找数据源。 4可以属性元素中设置其他标准或特定于供应商属性。 hibernate.Dialect属性指定使用哪个数据库。

    1.6K30

    太 OUT 了,看看 Java8 API日期处理,工作必用!

    2 关键 关键如下: Instant:瞬时实例 LocalDate:本地日期,包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等 LocalTime:本地时间,包含日期...3 实战 下面我们将通过一些简单实例来学习如何使用API,因为只有实际项目中用到,才是学习新知识以及新技术最快方式。 1....获取当前日期 Java 8 中 LocalDate 用于表示当天日期。和 java.util.Date 不同,它只有日期,包含时间。当你仅需要表示日期就用这个。...Java中如何检查这些节日或其它周期性事件呢?答案就是MonthDay这个组合了月份和日,去掉了年,这意味着你可以用它判断每年都会发生事件。 和这个相似的还有一个YearMonth。...还可以用这个得到 当月共有多少天,YearMonth 实例 lengthOfMonth() 方法可以返回当月天数,判断2月有28天还是29天非常有用。

    1.2K30

    知识改变命运 第八集(上):Java中和对象

    2.2 定义格式 java中定义需要用到class关键字,具体语法如下 //创建 class ClassName { //field 属性或成员变量 //method 行为或成员方法...实例化 3.1 什么是实例化 定义了一个,就相当于计算机中定义了一种类型,与int,double类似,只不过int和double是java语言自带内置类型,而是用户自定义了一个类型,...用类型创建对象过程,称为实例化,java中采用new关键字,配合名来实例化对象。 注意事项 new 关键字用于创建一个对象实例. 使用 . 来访问对象中属性和方法....通过上述例子发现两个问题: 每次对象创建调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化? 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?...5.2 构造方法 5.2.1 概念 构造方法(也称为构造器)是一个特殊成员方法,名字必须与名相同,创建对象,由编译器自动调用,并且整个对象生命周期内只调用一次。

    9210

    Django 1.10中文文档-第一个应用Part2-模型和管理站点

    这个例子中,我们只为Question.pub_date定义了一个通俗名称。对于此模型中所有其他字段,该字段机器可读名称将足以作为其通俗名称。 有些Field具有必需参数。...(在这个例子中,你创建了一个模型)并且会将这些更改存储为迁移文件。...让我们来修复这个问题,让Django在打印对象显示一些我们指定信息。...如果你不了解Python中时区处理方法,你可以时区支持文档中了解更多知识 保存修改,我们重新启动一个python shell python manage.py shell,再来看看其他API...页面的底部,则是一些可选项按钮: Save —— 保存更改,并返回当前类型对象变更列表界面; Save and add another:保存当前修改,并加载一个空白的当前类型对象表单

    2.3K60

    继承和多态(1)(继承部分)

    构造方法中一定会存在super(...)调用,用户没有写编译器也会增加,但是this(...)用户写则没有 再谈初始化 (跟代码块相关) 没继承关系,顺序是先执行静态代码块,然后是实例代码块...(如果在有继承关系前提下,先执行父实例变量初始化,再执行父实例代码块初始化,然后执行父构造方法,执行完子类实例变量初始化,然后同理依次执行子类实例代码块初始化,子类构造方法)所以这就是其创建一个实例对象顺序...如果在用该类创建实例对象之前没被加载,那么不管如何,因为加载都在创建对象之前,所以同理即可,先静态成员变量初始化,静态代码块初始化,实例成员变量初始化,实例代码块初始化,构造方法初始化(有继承关系前提下顺序我就不说了...(同理当super,this代表子类创建对象地址也可以访问) 而当子类和父同一个包,之前不同包不支持行为到相同包可以发生。...修饰局部变量定义好局部变量可以立即进行初始化,但之后依然必须得初始化,且必须在使用这个局部变量前初始化好,否则会报错。

    10410

    从Jupyter Notebook切换到Script5个理由

    但是,每次尝试新方法,都需要重新运行整个笔记本。这很耗时,尤其是处理过程或培训需要很长时间才能运行时。 对于重现性而言并不理想:如果要使用结构略有不同数据,则很难笔记本中识别错误源。...使用脚本,我们可以创建几个小函数,每个函数指定代码功能,如下所示 ? 更好是,如果可以将这些函数归为同一,例如处理数据函数,我们可以将它们归为同一! ?...即使我们碰巧破坏了代码,我们也知道在哪里修复它。 ? 我们还可以通过更改函数输入来试验不同参数。...例如,如果我们想在数据中删除不同列,我们只需要更改columns_to_drop为要删除列表,代码就可以平稳运行!...您可以脚本中创建和函数,然后将其导入笔记本中,以使笔记本不那么混乱。但是请注意不要过度使用笔记本,尤其是当您要将代码投入生产。 如果您对较大变化不满意,请从小做起。 大变化始于小步。

    1.2K20

    Java8中关于日期和时间API20个使用示例

    二、Java8中如何处理日期和时间 常有人问我学习一个最好方式是什么?我答案是实际项目中使用它。项目中有很多真正需求驱使开发者去发掘并学习库。简单得说就是任务驱动学习探索。...这对Java8新日期时间API也例外。我创建了20个基于任务实例来学习Java8特性。...示例 1、Java8中获取今天日期 Java8中LocalDate用于表示当天日期。和java.util.Date不同,它只有日期,包含时间。当你仅需要表示日期就用这个。...还可以用这个得到当月共有多少天,YearMonth实例lengthOfMonth()方法可以返回当月天数,判断2月有28天还是29天非常有用。...我们学会了如何创建并操作日期实例,学习了纯日期、以及包含时间信息和时差信息日期、学会了怎样计算两个日期间隔,这些计算当天与某个特定日期间隔例子中都有所展示。

    2.7K20

    CC++结构体完全攻略

    虽然今天结构体较少使用,但知道它们是什么,以及如何使用它们仍然很重要,这并不仅仅是因为可以较老程序中遇到它们,还因为某些情况下,实例无法使用,这时必须使用结构体。...以下是一个结构体声明示例,该结构体将 5 个变量绑定在一起,保存了员工工资单数据。这个特殊结构体名称是 PayRoll。请注意,它以大写字母开头,这和名使用大写字母开头约定一样。...,声明不会被实例化一样,结构体声明不会创建任何结构体实例。...本示例中结构体声明只是告诉编译器PayRoll结构体看起来样子。它本质上是创建一个名为 PayRoll 数据类型。...Date birthday = {23,1983}; //非法 还有一点很重要,不能在结构体声明中初始化结构体成员,因为结构体声明只是创建一个数据类型,还不存在这种类型变量。

    97210

    Quartz任务调度快速入门

    Job运行时信息保存在JobDataMap实例中; ●JobDetail:Quartz每次执行Job,都重新创建一个Job实例,所以它不直接接受一个Job实例,相反它接收一个Job实现,以便运行时通过...而有状态任务共享共享同一个JobDataMap实例,每次任务执行对JobDataMap所做更改会保存下来,后面的执行可以看到这个更改,也即每次执行任务都会对后面的执行发生影响。...②处创建一个SimpleTrigger实例,指定该TriggerScheduler中所属组及名称。接着设置调度时间规则。...构造Trigger实例,可以考虑使用org.quartz.TriggerUtils工具,该工具不但提供了众多获取特定时间方法,还拥有众多获取常见Trigger方法,如makeSecondlyTrigger...如果需要调整默认配置,可以路径下建立一个quartz.properties,它将自动被Quartz加载并覆盖默认设置。

    1.3K70
    领券