Я новичок в программировании javascript. Недавно я столкнулся с проблемой, запутывающей меня в моем путешествии по javascript. Я хочу создать конструктор Teacher(), который наследует всех членов конструктора Person().Как правильно создать свойство прототипа одного конструктора наследовать свойство прототипа своего оригинала?
Во-первых, я создаю Person() следующим образом
function Person(name) {
this.name = name;
};
Person.prototype.greeting = function() {
alert('Hi! I\'m ' + this.name + '.');
};
Во-вторых я создаю Учителя() от лица().
function Teacher(name){
Person.call(this,name);
};
Вот проблема:
Когда я попытался установить Учителя() 's прототип, это меня смутило, что следующие две практики кажутся одинаковыми. Думаю, они должны иметь определенную разницу. я писал следующее первое:
Teacher.prototype = Object.create(Person.prototype);
После того как я писал выше, я думаю, Teacher.prototype будет равна Person.prototype, что оказалось неверным:
Teacher.prototype === Person.prototype;//=>false
Однако, teacherA, экземпляр Учителя(), наследует метод приветствия от лица() успешно:
var teacherA = new Teacher();
teacherA.name = 'Kyle';
teacherA.greeting();//=>Hi!I'm Kyle.
Затем я попытался изменить мой код следующим образом, который сделал Учитель() 's прототипа свойства фас аль к Person() 's прототип объекта:
Teacher.prototype = Person.prototype;
Teacher.prototype === Person.prototype;//=>true
Конечно, teacherB, другой экземпляр Учителя(), наследует метод приветствие от лица(), а также:
var teacherB = new Teacher();
teacherB.name = 'Jane';
teacherB.greeting();//=>Hi!I'm Jane.
Кто-нибудь может сказать мне, почему эти две практики наследовали успешно, но в одной из двух ситуаций Teacher.prototype не был равен Person.prototype, что противоположно в другой ситуации? Благодаря!
Ваш ответ действительно информативный. Принимая это во внимание, когда я узнаю, определенно заставит меня лучше понять наследование. Огромное спасибо. –
Можете упомянуть, что когда вы написали: –