是否可以测试 javascript 函数是否为构造函数?
Is it possible to test if a javascript function is a constructor?
我想测试一个函数是一个构造函数(意味着用 new
调用),还是一个应该按字面调用的常规函数。
这很可能是不可能的,我找不到任何关于此事的信息,但想看看是否可能只是为了好玩。
这是我目前进行的基本检查:
function isConstructor(func) {
// Ensure it is a function...
if (typeof func !== 'function') {
return false;
}
// Check for at least one custom property attached to the prototype
for (var prop in func.prototype) {
if (func.prototype.hasOwnProperty(prop)) {
return true;
}
}
// No properties were found, so must not be a constructor.
return false;
}
- 这是一个合适的近似值吗?
- 还有什么我可以检查的吗?
- 这种方法有哪些 drawbacks/false 优点?
注意:这是一个好奇心的问题,不是必需的。请不要说 "that's a bad unit test" 或 "is it really worth it?"。这只是一个有趣的练习,看看有什么可能(尽管 bad/unreasonable/not-to-be-used)。
这是不可能的,因为 Javascript 中的任何函数都可以 成为构造函数。您可以调用任何以 new
开头的函数以使其 this
指向一个新对象,就像您可以 .call
任何函数以使其 this
指向您想要的任何对象一样.
我想测试一个函数是一个构造函数(意味着用 new
调用),还是一个应该按字面调用的常规函数。
这很可能是不可能的,我找不到任何关于此事的信息,但想看看是否可能只是为了好玩。
这是我目前进行的基本检查:
function isConstructor(func) {
// Ensure it is a function...
if (typeof func !== 'function') {
return false;
}
// Check for at least one custom property attached to the prototype
for (var prop in func.prototype) {
if (func.prototype.hasOwnProperty(prop)) {
return true;
}
}
// No properties were found, so must not be a constructor.
return false;
}
- 这是一个合适的近似值吗?
- 还有什么我可以检查的吗?
- 这种方法有哪些 drawbacks/false 优点?
注意:这是一个好奇心的问题,不是必需的。请不要说 "that's a bad unit test" 或 "is it really worth it?"。这只是一个有趣的练习,看看有什么可能(尽管 bad/unreasonable/not-to-be-used)。
这是不可能的,因为 Javascript 中的任何函数都可以 成为构造函数。您可以调用任何以 new
开头的函数以使其 this
指向一个新对象,就像您可以 .call
任何函数以使其 this
指向您想要的任何对象一样.