2015-05-13 2 views
0

Как эта функция определяет, существует ли свойство на prototype?Понимание этой пользовательской функции hasPrototypeProperty в JavaScript

function hasPrototypeProperty(object, name){ 
    return !object.hasOwnProperty(name) && (name in object); 
} 

Я смущен две вещи:

Что оператор ! делать методу hasOwnProperty?

И в то время как && кажется, говоря (name in object) должен быть правдой, а я вроде не уверен ...

Я знаю hasOwnProperty будет возвращать только true если свойство существует на экземпляре, но я прочитал все еще проверяет prototype, если да, зачем? Кажется, это странно, если вопрос - это единственное, что имеет значение?

Заранее благодарен!

ответ

1

Что такое! оператор, выполняющий метод hasOwnProperty?

Это boolean NOT operator. Он ничего не делает для метода, но к результату вызова.

И в то время как & &, кажется, говорил (имя в объекте) должен быть правдой, а я вроде не уверен ...

Да, это то, что он делает.

Я знаю, что hasOwnProperty вернет true только в том случае, если свойство существует на экземпляре, но я его прочитал, проверяя прототип, если да, зачем?

Нет, он не проверяет прототип. Однако in operator.

Так в основном, что hasPrototypeProperty функция возвращает true тогда и только тогда object не имеет собственного имущества с данным name, но есть возможно унаследованное свойство с этим name на object.

1

В основном это проверка исключительно, если enumerable property унаследовано.

Для этого он проверяет метод hasOwnProperty(), чтобы увидеть, если свойство в объекте не непосредственно принадлежат объекту (не оператор!):

, которые не установлены в hasOwnProperty !object.hasOwnProperty(name) ,


И если in operator возвращает истину это означает, что он принадлежит к цепи прототипов объекта

даже если это не прямое свойство это можно назвать на объекте, так как они относятся к наследование


Но помните, name in object возвращает true, только если свойство перечислимо;
например: toString() не будет (потому что это неоценимое свойство).

Смежные вопросы