Это для статических свойств / методов . Они также наследуются:
class Animal {
static test() { }
}
console.log(Rabbit.test());
Теперь, чтобы передать это правильно, функция конструктора Rabbit
должна наследовать функцию конструктора Animal
. Обычно это не проблема, поскольку функции тоже являются объектами и поэтому могут наследовать друг друга. К сожалению, нет способа создать функцию, которая наследует другую, которую необходимо установить впоследствии:
function Animal () { }
Animal.test = function() { }
function Rabbit() { }
Object.setPrototypeOf(Rabbit, Animal);
console.log(Rabbit.test());
Теперь следующая проблема заключается в том, что Object.setPrototypeOf
является совершенно новым, как и class
, поэтому его нельзя использовать для переноса. Вот почему в игру вступает свойство .__proto__
: когда-то оно было добавлено Chrome для изменения прототипа объекта, и поскольку многие библиотеки приняли его использование, другие браузеры также реализовали его, и оно также было добавлено в спецификацию, хотя это считается ошибкой дизайна (кошмар производительности). На данный момент это единственный надежный способ передать свойства статического класса.
В будущем поддержка браузера для class
, как мы надеемся, улучшится, и нам больше не придется полагаться на эти методы проникновения.