Я играл с JavaScript, в частности, моделировал объектно-ориентированное программирование с помощью классов и еще чего-то.
Я знал об этом способе достижения наследования
MyClass.prototype = new AnotherClass();
Но я не был удовлетворен, мне не понравилось, как мне нужно было вызвать конструктор AnotherClass
. Поэтому я играл, и я придумал что-то, что, казалось, сработало и в основном хотело бы второго мнения.
function clone (obj)
{
function CloneFactory () {}
CloneFactory.prototype = obj;
return new CloneFactory();
}
MyClass.prototype = clone(AnotherClass.prototype);
Клонируя прототип, мы получаем его новую копию и присваиваем этому прототипу MyClass
, так что изменение унаследованных свойств не будет влиять на свойства родительского прототипа. Как это было бы MyClass.prototype = AnotherClass.prototype
.
Я провел стресс-тесты, и это стало более эффективным при определенных обстоятельствах, т.е. когда в родительском конструкторе много кода, в противном случае это примерно то же самое. Еще одно преимущество (или, по крайней мере, я считаю полезным) заключается в том, что он позволяет в некоторой степени скрывать информацию от подклассов. Любые привилегированные методы и члены НЕ будут унаследованы.
Есть ли какая-то серьезная ошибка, которую я пропускаю?
Я не эксперт с JavaScript, на самом деле я довольно новичок в JavaScript, поэтому мне хотелось бы получить второе мнение по этому поводу, потому что я не могу ничего найти через Google. Я не хочу реализовывать плохой код:)!