📅  最后修改于: 2023-12-03 15:01:44.989000             🧑  作者: Mango
在 JavaScript 中,我们可以使用 typeof
和 instanceof
来检查一个变量的数据类型,但如何检查一个变量是否拥有某个方法呢?下面我们将介绍几种方式。
使用 in
运算符可以判断一个对象是否包含某个属性,因此可以用它来判断一个对象是否拥有某个方法。例如:
const obj = {
foo: function() {
console.log('hello');
}
};
// 判断对象是否包含 foo 方法
if ('foo' in obj && typeof obj.foo === 'function') {
console.log('obj has foo method');
}
原型链中的方法被放置在对象的 prototype
属性上。使用 hasOwnProperty()
方法可以判断一个对象是否具有该属性。例如:
const obj = {
foo: function() {
console.log('hello');
}
};
// 判断对象是否包含 foo 方法
if (obj.hasOwnProperty('foo') && typeof obj.foo === 'function') {
console.log('obj has foo method');
}
Object.prototype.toString()
方法可以返回一个对象的字符串表示,包括 Object、Array、Function 等。我们可以利用这个方法来判断一个变量是否为函数类型。例如:
const obj = {
foo: function() {
console.log('hello');
}
};
// 判断对象是否包含 foo 方法
if (Object.prototype.toString.call(obj.foo) === '[object Function]') {
console.log('obj has foo method');
}
使用上述方法可以判断一个对象是否具有某个方法,但有时一个对象可能只是一个空对象,即使它没有该方法,也不会抛出错误。那么如何判断一个对象是否具有某个方法且该方法可调用呢?可以使用 typeof
和 try...catch
结合的方式。例如:
const obj = {
foo: function() {
console.log('hello');
}
};
// 判断对象是否包含 foo 方法且该方法可调用
if (typeof obj.foo === 'function') {
try {
obj.foo();
console.log('obj has foo method and it is callable');
} catch (e) {
console.log('obj has foo method but it is not callable');
}
}
以上是几个检查对象方法的方法,希望对你有所帮助。