Как я могу проверить, был ли анонимный объект создан таким образом:
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
действительно ли определен prop2?
prop2
всегда будет определяться как функция, но для некоторых объектов это не требуется и не будет определено.
Я попробовал то, что было предложено здесь: Как определить, есть ли у Собственного объекта JavaScript свойство / метод? но я не думаю, что это работает для анонимных объектов.
javascript
Омар
источник
источник
Ответы:
typeof myObj.prop2 === 'function';
даст вам знать, если функция определена.источник
if(typeof myObj[propoeryStr] === 'function') { ... }
Вы хотите
hasOwnProperty()
:Ссылки: Mozilla , Microsoft , phrogz.net .
источник
var my_obj = {'node1': document.createElement('div')};
тогдаmy_obj.node1.hasOwnProperty('cloneNode')
false. однако решение Шона правильно вернет истину:typeof my_obj.node1.cloneNode === 'function'
3 варианта
typeof myObj.prop2 === 'function'
если имя свойства не динамическое / сгенерированноеmyObj.hasOwnProperty('prop2')
если имя свойства является динамическим, и проверьте только, является ли оно прямым свойством (не в цепочке прототипов)'prop2' in myObj
если имя свойства динамическое, проверьте цепочку прототиповисточник
Что вы подразумеваете под «анонимным объектом»?
myObj
не является анонимным, так как вы присвоили литерал объекта переменной. Вы можете просто проверить это:источник
Один из способов сделать это должен быть
if (typeof myObj.prop1 != "undefined") {...}
источник
Я знаю, что это старый вопрос, но я удивлен, что все ответы гарантируют, что метод существует, и это - функция, когда OP только хочет проверить на существование. Чтобы знать, что это функция (как уже говорили многие), вы можете использовать:
Но вы также можете использовать в качестве условия:
Или даже:
Это так, потому что функция оценивает
true
иundefined
оцениваетfalse
. Поэтому, если вы знаете, что если член существует, то это может быть только функция, вы можете использовать:Или в выражении:
источник