可能重复:
如何检测函数是否被调用为构造函数?
我希望在JavaScript中有一个函数,如果它被正常调用或者为了创建一个新实例而调用它,它的行为会有所不同.可能存在许多不同的用途,其中两个功能可以相关或不相关.new当函数总是用于创建新实例时,一种用途是免除编码器必须键入:
function MyClass(arg1, arg2) {
if(/* not called with "new" */) return new MyClass(arg1, arg2);
// instance initialization stuff here...
}
Run Code Online (Sandbox Code Playgroud)
这样我就不必输入var x = new MyClass(arg1, arg2):输入就足够了var x = MyClass(arg1, arg2)(但前者也不会错).
只是可能使用的一个例子.
可以这样做吗?如果是这样,怎么样?
没有办法绝对确定函数是如何被调用的,但你可以非常肯定地使用它this instanceof MyClass,如下所示:
if (this instanceof MyClass) {
// Was called with `new`
} else {
// Was called as regular function
}
Run Code Online (Sandbox Code Playgroud)
虽然有边缘情况,例如我可以创建一个新的MyClass实例然后做MyClass.call(new MyClass)- 这会产生误报,因为外部MyClass没有被调用new.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |