Есть ли метод, равный hasOwnProperty(), который может пройти цепочку прототипов?
Например у меня есть массив, давайте назовем его myArray
где:
var myArray = ['foo', 'bar'];
даже если, myArray.join()
вернусь 'foo,bar'
чек myArray.hasOwnProperty('join')
, вернусь false
потому что просто hasOwnProperty()
не будет пересекать цепь прототипа.
Есть ли способ сделать ту же функцию с возможностью прохождения цепочки прототипов?
PS: подойдет даже нестандартный метод.
2 ответа
Вы можете использовать in
оператор.
Оператор in возвращает true для свойств в цепочке прототипов.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Подобно:
if ('join' in myArray) {
...
}
Если вы хотите определить, доступен ли метод или свойство в объекте или в цепочке прототипов для объекта, вы можете использовать оператор in, цитируемый elclanrs.
Оператор in возвращает true для свойств в цепочке прототипов.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
В вашем примере вы могли бы написать
if ('join' in myArray) { // do something }
Если вы хотите определить тип свойства в цепочке прототипов, вы также можете использовать оператор typeof. Я не могу найти "простой английский" цитату, что это работает с операторами-прототипами, но если вы наберете следующее в консоли инструментов dev по вашему выбору:
var myArray = ['foo', 'bar']; typeof(myArray.join);
Это вернет "функцию", как и ожидалось, демонстрируя, что этот оператор работает с функциями и свойствами прототипа - и это я тоже могу подтвердить из своего опыта. Оператор typeof вернет одно из
"undefined", "объект", "логическое значение", "число", "строка"