WedX - журнал о программировании и компьютерных науках

hasOwnProperty() возвращает true для переопределенного унаследованного метода (toString()), однако документы Mozilla говорят об обратном?

Mozilla документ hasOwnProperty говорит

Присвоение свойства внутри объекта приведет к тому, что отладчики будут отображать свойство как принадлежащее экземпляру объекта; но это не означает, что "hasOwnProperty" будет истинным. Когда свойство наследуется от прототипа, "hasOwnProperty()" имеет значение false, даже если у объекта есть собственная копия.

Для проверки я переопределил метод Object.prototype.toString() в новом объекте (o), как показано ниже:

o = new Object();
o.toString = function(){
  console.log("ToString redefined");
}

Object.toString();

o.hasOwnProperty('toString'); 

AFAIU, переопределение toString() должно возвращать false, поскольку это унаследованное свойство, но оно возвращает true. Пожалуйста, объясните?

Кроме того, было бы здорово, если бы кто-нибудь мог объяснить следующее на примере:

Присвоение свойства внутри объекта приведет к тому, что отладчики будут отображать свойство как принадлежащее экземпляру объекта; но это не означает, что "hasOwnProperty" будет истинным.

спасибо приложение



Ответы:


1

Наследование работает через цепочку прототипов: когда вы пытаетесь получить доступ к свойству объекта, оно возвращает свойство этого объекта; если сам объект не имеет этого свойства, его прототип проверяется на наличие того же свойства и так далее, пока свойство не будет найдено или цепочка не закончится.

So:

let o = {};
o.toString();

Это находит свойство toString в прототипе свойства o.

o.toString = function () {};
o.toString();

Теперь нет необходимости проходить цепочку прототипов, так как o сам имеет свойство toString (которое вы только что присвоили ему напрямую). Теперь у него есть собственное свойство toString.

01.06.2017
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]