给定一个功能:
function x(arg) { return 30; }
您可以用两种方式来称呼它:
result = x(4);
result = new x(4);
第一个返回30,第二个返回一个对象。
您如何检测 在函数本身内部 调用 该函数的方式 ?
无论您采用哪种解决方案,它都必须与以下调用一起使用:
var Z = new x();
Z.lolol = x;
Z.lolol();
当前所有解决方案都认为将该Z.lolol()
方法称为构造函数。
我认为[ES2015之前]您想要的东西是不可能的。函数内根本没有足够的信息来进行可靠的推断。
查看ECMAScript 3rd Edition规范,new x()
调用时所采取的步骤实质上是:
x
x
正常调用,将新对象传递给this
x
返回了对象,则返回它,否则返回新对象对于执行该代码而言,没有什么有用的关于函数调用的方法,因此,唯一可以在内部进行测试的x
就是this
值,这就是所有答案的作用。正如您所观察到的,的新实例x
时调用x
的构造函数是从预先存在的实例不可区分的x
方式是:传递this
时调用x
一个函数,
除非* 你指定一个属性被创建的每个新的对象x
,因为它构造:
function x(y) {
var isConstructor = false;
if (this instanceof x // <- You could use arguments.callee instead of x here,
// except in in EcmaScript 5 strict mode.
&& !this.__previouslyConstructedByX) {
isConstructor = true;
this.__previouslyConstructedByX = true;
}
alert(isConstructor);
}
显然,这并不理想,因为您现在x
可以覆盖每个由此构造的对象的多余的属性,但是我认为这是您可以做的最好的事情。
(*) “ instance of”是一个不准确的术语,但足够接近,并且比“ x
作为构造函数调用而创建的对象”更为简洁
问题内容: 我有一个变量,我想知道它是否指向一个函数。 我曾希望我可以做些类似的事情: 但这给了我: 我选择的原因是 问题答案: 如果这是用于Python 2.x或Python 3.2+,则也可以使用。它曾经不推荐使用,但是现在不推荐使用,因此你可以再次使用它。你可以在此处阅读讨论内容:http : //bugs.python.org/issue10518。你可以执行以下操作: 如果这是针对Pyt
我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这
问题内容: 我在一个Activity中有一个IntentService,当我尝试调用该服务时,它将引发此错误,我发现这很奇怪,因为如果我声明了空的构造函数。 错误: AndroidManifest.xml 活动: 问题答案: 你是一个内部阶级。如果要将其保留在内部,请将其更改为static: 您可能需要阅读不同类型的嵌套类。google的第一个链接:http : //docs.oracle.com
我正在测试路由器,有两个函数,我需要测试第一个函数是否被调用,第二个函数是否被调用。有方法
我目前在我的大学学习初级java课程,仍然在学习编程的基础知识。这周我们一直在学习构造函数,我被困在本周任务的后半部分,所以任何帮助都将不胜感激。 实验室的第二部分(我一直坚持的部分)的说明如下: 为类Truck编写完整的代码,如下面的类图所示。一定不要在构造函数中使用重复的代码。例如,具有2个参数的构造函数应该调用具有1个参数的构造函数来设置柱体的值。 这些是它想让我做的构造函数。 任何关于如何
可能重复:< br >什么是复制省略和返回值优化? 我很难理解为什么在下面的代码中没有调用复制构造函数。 有人能解释一下为什么只调用构造函数,不调用复制构造函数吗?< br >谢谢。