问题标签 [constructor-chaining]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
352 浏览

c# - 是否保证在调用链式构造函数之前评估代码协定?

在我开始使用代码契约之前,我有时会在使用构造函数链接时遇到与参数验证相关的问题。

用一个(人为的)例子最容易解释:

我希望Test(string)构造函数链接Test(int)构造函数,为此我使用int.Parse().

当然,int.Parse()不喜欢有一个 null 参数,所以如果s是 null 它会在我到达验证行之前抛出:

这使得该检查无用。

如何解决?好吧,我有时会这样做:

这有点繁琐,堆栈跟踪在失败时并不理想,但它可以工作。

现在,随着代码合同的出现,我开始使用它们:

一切都很好。它工作正常。但后来我发现我可以做到这一点:

然后如果我这样做var test = new Test(null),则在之前Contract.Requires(s != null)执行。这意味着我可以完全取消测试! this(int.Parse(s))convertArg()

所以,关于我的实际问题:

  • 这种行为是否记录在任何地方?
  • 在为这样的链式构造函数编写代码契约时,我可以依赖这种行为吗?
  • 还有其他方法我应该解决这个问题吗?
0 投票
5 回答
23143 浏览

java - Java 构造函数链

嗨,我刚刚学习 Java 中的构造函数链接,并且有一些问题......

  1. 首先,有人可以解释一下我什么时候需要使用它吗?在我的脑海中,我真的想不出一种情况。

  2. 在这个例子中,在没有参数的构造函数中,我调用了另一个构造函数。如何访问这个新的“詹姆斯邦德”对象以供将来使用?

    /li>
0 投票
1 回答
770 浏览

javascript - 链接 Javascript 构造函数

我已经疯狂地用谷歌搜索了这个,我仍然不明白。

如果我设置子对象和父对象,如下所示:

不需要取消注释上面的行,以便能够得到以下结果:

我(可能不正确)的理解是这条线

将 Child 构造函数创建的原型设置为 Parent 构造函数创建的原型。因此,没有这条线,这条线

(我认为调用 Parent 构造函数,将 this 上下文设置为 Child,并传入名称)实际上不应该工作。

我的理解有什么问题?

提前感谢您的帮助!:)

0 投票
3 回答
123 浏览

javascript - 您如何覆盖 JS 构造函数链上的绑定?

我正在尝试在 JavaScript 中定义一个基类,该基类在创建时执行许多常见功能。该功能的一部分是创建一个组件并向该组件注册回调处理程序。

我遇到的问题是如何在扩展我的基类的子类中覆盖用于回调处理程序的函数。

具体来说,我有一个BasicPage创建组件的Table组件。还定义了一个使用新创建的注册的BasicPage默认函数。onRowClickTable

现在我想创建一个PageWithSections扩展BasicPage(通过call(..)语句)和覆盖的组件onRowClick。问题是单击处理程序与表的注册发生在基类的构造函数中。在注册时,onRowClick还没有被覆盖,所以引用的是onRowClick.

我制作了一个 jsBin 来说明这个问题。

http://jsbin.com/uDEjuzeQ/9/edit

如果您按顺序单击每个框一次,我希望消息框显示为:

还没有消息;点击行;点击行;BasicPage onRowClicked; 点击行;PageWithSections onRowClicked

在构造基础对象期间覆盖构造函数链上的函数并将被覆盖的函数绑定到某些东西的正确方法是什么?

更新 此问题最初引用了原型链,但实际上原型并未在此示例中实际使用。

该问题已更新以反映这一点。这最终更多的是关于后期绑定的问题。

0 投票
1 回答
765 浏览

c++ - 调用基默认构造函数模板类

问题是如何从继承的模板类中调用基本构造函数。我想创建一个 FixedQueue 并在 std::queue 中重载一些函数。因此 std:queue 是基类。从 c++11 开始,关键字 using 可用于调用基类,如果这是一个专门的类,它可以工作,但我无法让它与模板类一起使用。

此外,我尝试使用旧的 c++ 标准,在该标准中我只需调用 std::queue 中定义的构造函数。但是它不起作用。

h 文件

.cpp 文件

主文件。

问题是这样的。如何将构造函数链接到基类 std::queue 中定义的构造函数。模板的东西正在杀死我。

这是我从 clang 获得的错误消息,这是通常的未定义引用。

如果有人知道如何通过“使用”或旧时尚方式来做到这一点,我对两者都很满意。提前致谢

0 投票
2 回答
218 浏览

c# - 产出未产生预期结果

这是我的代码:

这是我的输出:

我的问题是:

而不是让项目 1,3 和 5 的库存编号为 10000、10001 和 10002,我按照上述方式获得。无法理解为什么?

0 投票
1 回答
741 浏览

java - 在超类构造函数中访问局部变量

我有一个具有此构造函数的超类:

然后我有一个子类,我想在其中使用相同的构造函数,但还要添加 2 个字符串。这是我的代码:

使用此代码,我收到未指定结果的错误。我怎样才能解决这个问题?

0 投票
2 回答
644 浏览

vb.net - 链接重载的构造函数

我正在尝试创建一个代码重复最少的高效类。

我有这个定义:

具有 firstName 和 lastName 参数的构造函数是进行验证的端点构造函数。以 userGUID 作为参数的构造函数将查询 DB 以获取名称并调用最终构造函数。这样,所有执行都应该针对实际执行所有验证等的构造函数之一。其背后的想法是,如果我添加新的构造函数,我只需要提取必要的数据(名字/姓氏)并调用最终的构造函数进行验证。

但是,有一个编译错误阻止我在线使用这个系统Me.New(dt.Rows(0)("FirstName").ToString(),dt.Rows(0)("LastName").ToString())。显然,这一行必须是构造函数中的第一行。但是如果我将其作为第一行,它将破坏验证过程,因为验证会由于没有名字/姓氏而引发错误。我必须查询数据库才能提取该信息。

我知道我可以在这里分配值并从这个构造函数调用验证,但这会有效地将这个构造函数与最后一个构造函数隔离,从而复制代码并增加维护。仅供参考,在下面的示例中,我只有 2 个构造函数,但实际上我还有更多。如果每个人都会做自己的任务,那么它只会增加维护。

那么,有没有办法通过执行一些代码然后调用重载的构造函数来完成我的任务?

感谢您的任何见解

更新 1:

根据 the_lotus 评论,我包括 dt 定义。这个问题有一个解决方法。基本上我会从最终的构造函数中取出验证和赋值,并将其放入一个函数中。所有的构造函数都会调用这个函数,从而消除了链接构造函数的需要。它看起来不错,但我想了解为什么为了链接构造函数,我必须将构造函数调用放在第一行。

这是新代码:

公共类 Foo Private _firstName As String = "" Private _lastName As String = ""

结束类

一个奇怪的更不用说:在线代码转换器(vb.net 到 C#)在转换链式构造函数调用时没有问题,而不是在第一行。C# 代码返回为this.#ctor(dt.Rows(0)("FirstName").ToString(), dt.Rows(0)("LastName").ToString());但是,如果我尝试转换回 VB.NET,它会失败。

0 投票
3 回答
574 浏览

java - 构造函数链接会在 Java 中创建多个对象吗?

如果我使用 this 关键字调用同一类的另一个构造函数。它会创建两个对象吗?

如果是这样,在以下示例中哪个对象将处于活动状态:

我想知道构造函数链接的行为。请解释它是如何工作的?

0 投票
1 回答
211 浏览

c# - CodeContracts 错误地标记基本构造函数中已存在的缺失前提条件

假设我有以下类层次结构:

编译时,我收到以下 CodeContracts 错误Foo

有没有办法让 CodeContracts 认识到验证已经在基类中发生?