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

问题描述 投票:125回答:5

如何检查是否创建了这样的匿名对象:

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

确实有prop2定义?

prop2将始终定义为函数,但对于某些对象,它不是必需的,也不会被定义。

我尝试了这里建议的:How to determine if Native JavaScript Object has a Property/Method?,但我认为它不适用于匿名对象。

javascript
5个回答
248
投票

typeof myObj.prop2 === '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);
}

36
投票

你想要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

参考文献:MozillaMicrosoftphrogz.net


12
投票

3选项

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

8
投票

你是什​​么意思“匿名对象?” myObj不是匿名的,因为你已经为变量分配了一个对象文字。你可以测试一下:

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.