Я пытаюсь понять метод hasOwnProperty(). Я понимаю, что метод проверяет, имеет ли объект собственное свойство с заданным именем в методе. Однако он возвращает false для наследуемых объектов.hasOwnProperty() method
var o = {
name: 'Master',
number: '117',
last: 'Chief'
};
o.prototype = {
planet: 'Halo'
};
for(var p in o) {
if(!o.hasOwnProperty(p)) {
continue;
}
console.log(p);
}
Так что, когда я запускаю этот скрипт, консоль возвращает "имя", "количество", "последний", и "прототип" от o.prototype. Может ли кто-нибудь дать мне объяснение, почему сценарий возвращает возвращаемые унаследованные свойства? Я думал, что отрицание метода «hasOwnProperty()» пропустит унаследованные свойства.
Это не печатает «планету», поэтому она делает то, что вы ожидаете. –
Не воспроизводимый. Этот код записывает «имя, номер, последний, прототип», а не «имя, номер, последний, завод». И объект наследует только объект Object.prototype, который не имеет перечислимого свойства (по умолчанию). – Oriol
В [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty) есть статья, которая очень хорошо объясняет этот метод. То, с чем вы сталкиваетесь _actually_, - это концепции, связанные с прототипическим наследием, что очевидно из-за неудачной попытки использования прототипов. Пожалуйста, прочитайте [Работа с объектами] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects) и потратите некоторое время на правильное изучение ООП в JavaScript. – Oka