📜  javascript 检查对象方法 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:44.989000             🧑  作者: Mango

JavaScript 检查对象方法

在 JavaScript 中,我们可以使用 typeofinstanceof 来检查一个变量的数据类型,但如何检查一个变量是否拥有某个方法呢?下面我们将介绍几种方式。

检查方法是否存在
使用 in 运算符

使用 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.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');
}
检查方法是否可调用

使用上述方法可以判断一个对象是否具有某个方法,但有时一个对象可能只是一个空对象,即使它没有该方法,也不会抛出错误。那么如何判断一个对象是否具有某个方法且该方法可调用呢?可以使用 typeoftry...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');
  }
}

以上是几个检查对象方法的方法,希望对你有所帮助。