当前位置: 首页 > 面试题库 >

构造函数可以返回什么值以避免返回此值?

巫新知
2023-03-14
问题内容

return除了this使用new关键字调用构造函数时,Java语言中的语句可以返回值的确切情况是什么?

例:

function Foo () {
  return something;
}

var foo = new Foo ();

如果我没记错的话,如果它something是一个非函数原语,this将被返回。否则something返回。这个对吗?

换句话说,什么值可以something引起(new Foo () instanceof Foo) === false


问题答案:

确切的条件在[[Construct]]内部属性上进行了描述,该属性由new操作员使用:

来自ECMA-262第3条。版本规格:

13.2.2
[[Construct]]

调用对象的[[Construct]]属性时,将执行以下步骤:Function``F

  1. 创建一个新的本机ECMAScript对象。
    2.
    将的[[Class]]属性设置Result(1)"Object"

  2. 获取的prototype属性值F
    4.
    如果Result(3)是对象,请将的[[Prototype]]属性设置Result(1)Result(3)
    5.
    如果Result(3)不是对象,则按15.2.3.1中所述将[[Prototype]]属性设置Result(1)为原始Object原型对象。
    6.
    调用的[[Call]]属性F,将其提供Result(1)this值,并提供传入的参数列表[[Construct]]作为参数值。
  3. 如果[Type](http://bclary.com/2004/11/07/#a-8)(Result(6))是,
    Object则返回Result(6)
  4. 返回Result(1)

查看步骤7和8,仅当Result(6)F构造函数返回的值)类型 不是 Object时,才返回新对象。



 类似资料:
  • 问题内容: 如果我在构造函数中返回一些值或对象,那么var会得到什么? 在两种情况下都会得到什么n? 其实这是一个测验问题,答案是什么? 自定义对象构造函数返回什么? a)新实例化的对象 b)未定义-构造函数不返回值 c)不论return语句是 d)等于return语句是什么;新实例化的对象(如果没有return语句) 问题答案: 我发现了这个很棒的链接: 上面提到的第二点魔术是构造函数返回特定的

  • 问题内容: 在浏览一些旧代码时,我遇到了这个宝石: 第二行在Eclipse中被标记为无效代码,我知道为什么。似乎没有明确抛出任何异常,并且构造函数不可能抛出任何类型的异常(例如)。 我的问题是 为什么 要进行空检查?以前在Java的旧版本中,构造函数是否可以返回null?还是这仅仅是毫无用处的代码? 问题答案: 该代码在任何Java版本中均无效。构造函数不可能返回,即使构造函数会抛出异常,也不会调

  • 问题内容: 到目前为止,我在构造函数中有一个类 的功能是在数据库中查找特定的电子邮件地址。当我将标识符设置为某些电子邮件时,我确定它不在数据库中;第一个IF被传递,并转到第一个ELSE。这里的构造函数应该返回FALSE; 但是,它返回具有所有NULL值的类的对象! 我如何防止这种情况?谢谢 编辑: 谢谢大家的回答。那太快了!我看到OOP方式是抛出异常。因此,抛出一个问题,我的问题发生了变化,我应该

  • 问题内容: 我是一名编程初学者,对函数的返回值有疑问。 我正在学习Java。 我已经附上了我的书中具有经典选择排序功能的代码。 现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础: int [] a = new int [] {1,9,2,8,3,7,4,6​​,5}; 排序(a); if(ascending(a))System.out.println(“ Works”

  • 问题内容: 我有这个代码。对象构造函数是否有可能以某种方式失败,从而为它分配了一个值,并在构造函数返回后释放了该对象? 问题答案: 假设您使用的是PHP 5,则可以在构造函数中引发异常: 为了清楚起见,您可以将其包装在静态工厂方法中: 顺便说一句,某些版本的PHP 4允许您在构造函数中将$ this设置为NULL,但我认为这从未得到正式批准,并且最终删除了“功能”。

  • 问题内容: 这个问题已经在这里有了答案 : java“ void”和“ non void”构造函数 (4个答案) 10个月前关闭。 问题答案: 您定义的实际上不是构造函数,而是称为的方法。如果您将代码更改为如下所示,则可以正常运行: 如果未明确定义任何特定的构造函数,则编译器会自动创建一个无参数的构造函数。