如何检查匿名对象是否有方法?

我怎样才能检查一个匿名的对象是这样创build的:

var myObj = { prop1: 'no', prop2: function () { return false; } } 

确实有一个prop2定义?

prop2将永远被定义为一个函数,但是对于一些对象来说它不是必需的,也不会被定义。

我尝试了这里所build议的: 如何确定本地JavaScript对象是否有一个属性/方法? 但我不认为它适用于匿名对象。

typeof myObj.prop2 === 'function'; 会让你知道,如果function定义。

 if(typeof myObj.prop2 === 'function') { alert("It's a function"); } else if (typeof myObj.prop2 === 'undefined') { alert("It's undefined"); } else { alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2); } 

你想hasOwnProperty()

 var myObj1 = { prop1: 'no', prop2: function () { return false; } } var myObj2 = { prop1: 'no' } alert(myObj1.hasOwnProperty('prop2')); // returns true alert(myObj2.hasOwnProperty('prop2')); // returns false 

参考文献: Mozilla , 微软 , phrogz.net 。

你是什​​么意思的“匿名对象?” myObj不是匿名的,因为您已经将对象文字赋值给一个variables。 你可以testing一下:

 if (typeof myObj.prop2 === 'function') { // do whatever } 

3个选项

  1. typeof myObj.prop2 === 'function'如果属性名称不是dynamic/生成的
  2. myObj.hasOwnProperty('prop2')如果属性名称是dynamic的,只检查它是否是直接属性(不在原型链中)
  3. 如果属性名称是dynamic的,则'prop2' in myObj使用'prop2' in myObj ,并检查原型链

一种方法做到这一点必须是if (typeof myObj.prop1 != "undefined") {...}