#javascript #inheritance #ecmascript-6
#javascript #наследование #ecmascript-6
Вопрос:
В моем проекте есть разные объекты, которые расширяют какой-либо другой объект, поступающий из библиотеки. Объект библиотеки расширяет класс объектов библиотеки.
Итак, мы имеем следующую архитектуру :
// The library object class
class Object {
}
// The library object1 class that extends object library class
class Object1 extends Object{
}
// The library object2 class that extends object library class
class Object2 extends Object{
}
// My object class that extends Object1 library class
class MyObject extends Object1{
}
// My second object class that extends Object2 library class
class MySecondObject extends Object2{
}
Мой вопрос в том, как я могу использовать синтаксис es6 для добавления метода в класс ‘Object’ библиотеки, которую я использую, без изменения кода моей библиотеки (модуля узла).
В es5 я сделаю что-то вроде :
MyLib.Object.prototype.myNewMethod = function () {
}
Для того, чтобы
const o = new MyObject();
o.myNewMethod();
const o2 = new MySecondObject();
o2.myNewMethod();
Спасибо за помощь.
Комментарии:
1. Почему вы предпочитаете изменять объект библиотеки, а не иметь промежуточный класс? В чем преимущество? Как правило, «обезьянье исправление» вещей, которыми вы не владеете, считается плохой практикой.
2. Я отредактировал свой вопрос. Мои объекты не расширяют тот же библиотечный класс. Взгляните
Ответ №1:
Это то, что вы ищете?
// The library object class
class Object {
myNewMethod() {}
}
Даже с ES6 вы все равно можете использовать Object.prototype
Object.prototype.myNewMethod = function() {}
Но правильный способ — оставить исходный базовый класс таким, какой он есть, и использовать наследование.
class Object1 extends Object {
myNewMethod() {}
}
Комментарии:
1. На самом деле, для этого мне нужно изменить код библиотеки. Я ищу способ добавить метод в класс ‘object’ библиотеки из моего кода, используя синтаксис es6. Для того, чтобы иметь ‘newMethod’ во всех моих объектах, которые расширили класс ‘Object1’
2. обязательно ли использовать синтаксис es6? почему не просто
YourClass.prototype.myMethod
?3. С другой стороны, это тоже плохой ответ, исправление библиотеки — не очень хорошая идея, вместо этого расширьте свой пользовательский класс с помощью необходимых вам методов.
4. мне не нужно использовать синтаксис es6. Моя любопытная сторона ищет способ написать это в es6
5. У меня есть 10 разных классов, которые расширяют класс объектов библиотеки, во всех моих классах newMethod должен будет выполнять точно такую же работу. Именно по этой причине я ищу способ добавить его в класс библиотеки ‘Object’, который я расширяю.