假设我有一个函数,我需要检查它是否具有某个名称的类方法.例如:
function Foo() {
this.bar = function() {
console.log("I am bar!");
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查Foo类是否实际上有bar方法.我可以创建一个新的Foo实例,然后检查它,我只是想知道是否有更好的方法来做到这一点.
我可以创建一个新的Foo实例,然后检查它,我只是想知道是否有更好的方法来做到这一点.
不,如果在构造函数中添加方法,就像在示例中一样.在创建实例之前无需检查.(好吧,除了构造函数的源代码,正如Pointy在评论中指出的那样.)
如果它被定义Foo.prototype,那将是另一回事:
function Foo() {
}
Foo.prototype.bar = function() {
console.log("I am bar!");
};
Run Code Online (Sandbox Code Playgroud)
然后你可以通过寻找来检查Foo.prototype.bar.
旁注:称他们为"班级方法"可能会让人感到困惑.在基于类的OOP中,"类方法"通常不是特定于实例的类,而不是特定于实例但由类定义的类方法.当然,JavaScript没有基于类的OOP(它具有典型的OOP,即使在ES6中也增加了类似类的陷阱).