2016-04-29 1 views
3

Иногда (хотя и редко) вам необходимо расширить, а не перезаписи родительских статических свойств, таких как (очень хромой) пример ниже:Как расширить статические свойства в ES Далее?

class Person { 
    static coreStats = { 
     role: "slacker", 
     weapon: null, 
     speed: 4, 
     vechicle: "roller blades", 
    }; 
} 

class Ninja extends Person { 
    static coreStats = { 
     role: "silent assassin", 
     weapon: "katana", 
     speed: 99, 
    }; 
} 

console.log(Ninja.coreStats); // But vechicle is no more 

Как один простираться статические свойства в классе ребенка без затирания родительские свойства?

+0

Просто из любопытства, статические свойства (не статические методы), часть ES6? Или есть предложение TC39 для этого где-то? – nils

+0

Найдено: https://github.com/jeffmo/es-class-fields-and-static-properties – nils

+0

Отправил редактирование, потому что я специально спросил о ES2015. Если его не будет доступно в 2015 году, мы с удовольствием ответим «невозможно в es2015» – Chris

ответ

4

вы можете сделать это следующим образом:

class Person { 
    static coreStats = { 
     role: "slacker", 
     weapon: null, 
     speed: 4, 
     vechicle: "roller blades", 
    }; 
} 

class Ninja extends Person { 
    static coreStats = Object.assign({}, Person.coreStats, { 
     role: "silent assassin", 
     weapon: "katana", 
     speed: 99 
    }); 
} 
console.log(Ninja.coreStats); 

Это слияние coreStats и переопределить Person.coreStats с Ninja.coreStats в случае дупликации

+0

В ниндзя: 'static coreStats = Object.assign ({}, Person.coreStats, { Роль:« тихий убийца », оружие:« катана », скорость: 99 });'? – Apolo

+0

Отредактированный ответ в соответствии с предложением @Apolo. Сейчас он выглядит чище. –

+0

Это не хорошо, что происходит, когда вы делаете 'класс Foo extends Person' ?? – Hitmands

Смежные вопросы