Обычно я реализую наследование по следующим строкам.Использование Object.assign и Object.create для наследования
function Animal() { this.x = 0; this.y = 0;}
Animal.prototype.locate = function() {
console.log(this.x, this.y);
return this;
};
Animal.prototype.move = function(x, y) {
this.x = this.x + x;
this.y = this.y + y;
return this;
}
function Duck() {
Animal.call(this);
}
Duck.prototype = new Animal();
Duck.prototype.constructor = Duck;
Duck.prototype.speak = function() {
console.log("quack");
return this;
}
var daffy = new Duck();
daffy.move(6, 7).locate().speak();
Я прочитал this post by Eric Elliott и, если я правильно понимаю, я могу использовать Object.create
и Object.assign
вместо? Неужели это так просто?
var animal = {
x : 0,
y : 0,
locate : function() {
console.log(this.x, this.y);
return this;
},
move : function (x, y) {
this.x = this.x + x;
this.y = this.y + y;
return this;
}
}
var duck = function() {
return Object.assign(Object.create(animal), {
speak : function() {
console.log("quack");
return this;
}
});
}
var daffy = duck();
daffy.move(6, 7).locate().speak();
Как в стороне, функции конструктора условных обозначений капитализируются, должны ли объектные литералы, которые действуют как конструкторы, также капитализируются?
Я понимаю, что есть много вопросов здесь обсуждают new
против Object.create
, но они, как правило, кажется, относятся к Duck.prototype = new Animal();
против Duck.prototype = Object.create(Animal.prototype);
Если вы используете ES2015, вы должны использовать 'class' &' extend' – Amit
@ Признаться, это, очевидно, не вопрос, который он задал. Является ли использование 'class' и' extend' хорошей идеей, является частью другого обсуждения. – nils
@Amit -Почему я должен использовать 'class' и' extend'? Если я это сделаю, мне придется использовать «новый», не так ли? Какое преимущество имеет использование 'class' и' extend' над 'Object.assign (Object.create (...'? – user5325596