Да, вы правы, вот как это работает! Но__proto__
не является указателем, это ссылка, и ее использование лишено. В Javascript реальных указателей не существует, но ссылки делают.
Если создать тип, который наследуется от животных, как это:
function FastAnimal() {
Animal.call(this, 'extreme-fast');
}
FastAnimal.prototype = Object.create(Animal.prototype);
FastAnimal.prototype.constructor = FastAnimal;
FastAnimal.prototype.getSpeed = function() { return '1MILLION'; };
var fa = new FastAnimal();
fa.getName = function() {}
Чем с поиском для свойства или методы в fa
будет идти по этому пути:
- делает
fa
имеет эту СОБСТВЕННУЮ недвижимость (как getName)
- Это действительно есть в
FastAnimal.prototype
(getSpeed)
- оно существует в
Animal
В целом: Этот поиск продолжается до тех пор, пока в пути prototype
s. Однако именно это происходит под капотом и называется цепью прототипов.
NB:
Если вы хотите, чтобы цикл по свойствам данного объекта, есть два способа:
for (var prop in obj) {
//do stuff
}
Это включает в себя свойства прототипа и, как правило, не то, что люди хотят, это почему
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
//do stuff
}
}
является общей картины, НО есть новый тип цикла идет вверх и мы надеемся использовать в ближайшее будущее.
for (var prop of obj) {}
Это также явно исключает свойства прототипа объекта.
Да , ---------------- – JLRishe