如何检查匿名对象是否有方法?
我怎样才能检查一个匿名的对象是这样创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个选项
-
typeof myObj.prop2 === 'function'
如果属性名称不是dynamic/生成的 -
myObj.hasOwnProperty('prop2')
如果属性名称是dynamic的,只检查它是否是直接属性(不在原型链中) - 如果属性名称是dynamic的,则
'prop2' in myObj
使用'prop2' in myObj
,并检查原型链
一种方法做到这一点必须是if (typeof myObj.prop1 != "undefined") {...}