У меня есть следующий код Javascript;Смущает поведение прототипа Javascript
var Person = function(name, age) {
this.name = name;
this.age = age;
return this;
};
Person.prototype.getAge = function() {
alert("Age : " + this.age);
}
var p1 = new Person("xyz",10);
p1.getAge();
Это отлично работает, и я получаю предупреждение, как Возраст: 10
Теперь, если я обновлю код, как показано ниже (определяется СеЬАд() после того, как инстанцировании Person объект p1);
var Person = function(name, age) {
this.name = name;
this.age = age;
return this;
};
var p1 = new Person("xyz",10);
Person.prototype.getAge = function() {
alert("Age : " + this.age);
}
p1.getAge();
Он по-прежнему возвращает мне результат, как «Возраст: 10»
Теперь мой вопрос, как это работает правильно, так как Person.prototype.getAge была определена после того, как мы создали экземпляр объекта Person p1? Это из-за того, как работает «прототип»?
Я был готов к повышению, но, пожалуйста, сначала не расширяйте 'Object.prototype', который полностью не рекомендуется, если вы действительно не знаете, что вы делаете ... – MaxArt
@MaxArt Я могу изменить что, например, _ «Не расширять« Object.prototype' ** с перечислимым свойством **, если вы на самом деле не имеете в виду его. Обычно настраиваемые методы должны ** не перечислимы **, и поэтому должны быть определены с помощью ['Object .defineProperty() '] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty)." _ – Phrogz
@MaxArt: Я не рекомендую расширять 'Object. прототип "- хорошая идея, просто как пример для OP, демонстрирующий, что прототип может быть изменен в любое время – BLSully