существует ли метод, равный hasOwnProperty(), который может проходить по цепочке прототипов?

например, у меня есть массив, назовем его myArray, где:

 var myArray = ['foo', 'bar']; 

хотя myArray.join() вернет 'foo,bar' , проверка myArray.hasOwnProperty('join') вернет false , потому что просто hasOwnProperty() не пройдет по цепочке прототипов.

Есть ли способ сделать ту же функцию с возможностью прохождения цепочки прототипов?

P.S. Подойдет даже собственный метод.


person ProllyGeek    schedule 25.08.2014    source источник
comment
Да, оператор in.   -  person elclanrs    schedule 26.08.2014
comment
@elclanrs, не могли бы вы уточнить, как именно?   -  person ProllyGeek    schedule 26.08.2014
comment
если вы знаете, что искомое не будет ложным, нулевым, 0 или , if(myArray['join']) работает   -  person dandavis    schedule 26.08.2014


Ответы (2)


Вы можете использовать оператор in.

Оператор in возвращает true для свойств в цепочке прототипов.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

Нравиться:

if ('join' in myArray) {
  ...
}
person elclanrs    schedule 25.08.2014
comment
о, отлично, я действительно не думал об этом, в конце концов, это объект!! большое спасибо. - person ProllyGeek; 26.08.2014

Если вы хотите определить, доступен ли метод или свойство в либо объекте или в цепочке прототипов для объекта, вы можете использовать in operator, как указано elclanrs.

Оператор in возвращает true для свойств в цепочке прототипов.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

В вашем примере вы можете написать-

if ('join' in myArray) { // do something }

Если вы хотите определить тип свойства в цепочке прототипов, вы также можете использовать оператор typeof. Я не могу найти "простую английскую" цитату о том, что это работает с операторами прототипа, но если вы наберете следующее в консоли инструментов разработки по вашему выбору:

var myArray = ['foo', 'bar']; typeof(myArray.join);

Это вернет «функцию», как и ожидалось, демонстрируя, что этот оператор работает с функциями и свойствами прототипа — и это то, что я также могу подтвердить на своем опыте. Оператор typeof вернет одно из:

"неопределенный", "объект", "логическое значение", "число", "строка"

person pwdst    schedule 25.08.2014
comment
это типичный ответ вроде elclarns - person ProllyGeek; 26.08.2014
comment
@ProllyGeek Я процитировал комментарий elclanrs в своем ответе, но в то время, когда я начал писать ответ, elclanrs не опубликовал ответ, и вы запросили дополнительные разъяснения, которые я пытался предоставить. Хотя мы цитировали один и тот же источник, это не был ответ на копирование и вставку. - person pwdst; 26.08.2014