У меня возникли проблемы с пониманием. Я искал какое-то время о различиях, но я не могу найти ответ, который я ищу.Непонимание создания OOP Javascript
Я пытаюсь изучить Javascript ООП, и каждый учебник, который я читал, кажется, отличается от способа наследования, и его часто объясняют очень сложным образом. Проблема, с которой я сейчас сталкиваюсь, связана с созданием методов для объекта, я использую код из документации разработчика Mozilla.
Вы увидите в большом блоке кода ниже, что я пытался добавить метод jump
в Person
, как это:
Person.prototype = {
jump: function() {
console.log("Jumping")
}
}
Это не работает она в основном разбивает весь класс говорит мне, что student1.walk
является не является функцией. Однако, если я изменю объявление метода на
Person.prototype.jump = function() {
console.log("Jumping");
}
Все работает так, как должно, когда я вызываю методы. С точки зрения личного стиля, хотя мне нравится первый способ создания методов, потому что мне не нужно повторять часть Person.prototype
, я могу просто добавить запятую, за которой следует мое объявление метода. Мне интересно, какая разница между этими двумя способами создания методов, потому что я не могу найти ответ нигде. Я хочу понять, почему он ломается, используя также первый метод.
var Person = function(firstName) {
this.firstName = firstName;
};
Person.prototype.walk = function(){
console.log("I am walking!");
};
Person.prototype = {
jump: function() {
console.log("Jumping");
}
}
Person.prototype.sayHello = function(){
console.log("Hello, I'm " + this.firstName);
};
function Student(firstName, subject) {
Person.call(this, firstName);
this.subject = subject;
}
Student.prototype = Object.create(Person.prototype); // See note below
Student.prototype.constructor = Student;
Student.prototype.sayHello = function(){
console.log("Hello, I'm " + this.firstName + ". I'm studying "
+ this.subject + ".");
};
Student.prototype.sayGoodBye = function(){
console.log("Goodbye!");
};
var student1 = new Student("Janet", "Applied Physics");
student1.sayHello();
student1.walk();
student1.sayGoodBye();
student1.jump();
'Person.prototype = {...}' переопределяет прототип. Вы можете сделать 'Object.assign (Person.prototype, {...})' – elclanrs
Вместо того, чтобы новый объект вводить в 'prototype', вы должны назначить новый метод в вашем случае' jump' –