ãã®èšäºã§ã¯ãJavaScriptã®å€å
žçãªç¶æ¿ããã®äœ¿çšã®äžè¬çãªãã¿ãŒã³ãæ©èœãããã³é »ç¹ãªã¢ããªã±ãŒã·ã§ã³ãšã©ãŒã«ã€ããŠèª¬æããŸãã BabelãBackbone JSãããã³Ember JSã®ç¶æ¿ã®äŸãèŠãŠãããããããªããžã§ã¯ãæåã®ç¶æ¿ã®äž»èŠãªååãåŒãåºããŠãEcmaScript 5ã§ç¬èªã®å®è£
ãäœæããŠã¿ãŸãããã
ãã®èšäºã¯ãä»ã®èšèªã®ç¶æ¿ã«ç²ŸéããŠãããJavaScriptã§ãã®ãããªåäœããšãã¥ã¬ãŒããã詊ã¿ã«ééãã人ãããã³å®è£
ãæ¯èŒããŠããŸããŸãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®å
éšãèŠãããšã«èå³ããã人ã察象ãšããŠããŸãã åçŽãª
æ¡åŒµæ©èœã¯ãéåžžã«ç°ãªãæ¹æ³ã§å®è£
ã§ããããšãããããŸããã å€ãã®å Žåããã®å Žåã¯ééããçºçããŸãïŒä»¥äžã®ãæãäžè¬çãªééããã®æ®µèœãåç
§ïŒã
ãã®èšäºã¯ã Today Software Magazineã®çããããªãã¬ãŒã³ããŒã·ã§ã³ã§è±èªã§å
¥æã§ããŸãã
å€å
žçãªç¶æ¿ã«ã€ããŠ
ã¯ã©ã·ãã¯ã¯ãOOPã®ç¶æ¿ãšããŠçè§£ãããŠããŸãã ãåç¥ã®ããã«ãçŽç²ãªJavaScriptã«ã¯å€å
žçãªç¶æ¿ã¯ãããŸããã ããã«ãã¯ã©ã¹ã®æŠå¿µãæ¬ ããŠããŸãã çŸåšã®EcmaScript仿§ã§ã¯ãã¯ã©ã¹ãæäœããããã®æ§ææ§é ã远å ãããŠããŸãããå®éã«ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãšãããã¿ã€ãã䜿çšãããšããäºå®ã¯å€ãããŸããã ãããã£ãŠããã®ææ³ã¯ãæ¬äŒŒå€å
žçãç¶æ¿ãšåŒã°ããããšããããããŸãã ããããå¯äžã®ç®æšãã€ãŸãéåžžã®OOPã¹ã¿ã€ã«ã§ã³ãŒããæç€ºããããšã远æ±ããŸãã
ã¯ã©ã·ãã¯ã«å ããŠãããŸããŸãªç¶æ¿ææ³ããããŸããæ©èœããããã¿ã€ãïŒçŽç²ãªåœ¢åŒïŒããã¡ã¯ããªãŒãããã¯ã¹ã€ã³ã䜿çšããŸãã éçºè
ã®éã§é«ã人æ°ãç²åŸããŠããç¶æ¿ã®æŠå¿µãã®ãã®ãæ¹å€ãããŠãããå€ãã®å Žåãåççãªä»£æ¿
æ§æãšã¯å¯Ÿç
§çã§ãã
ããã«ãç¶æ¿ã¯ãå€å
žçãªã¹ã¿ã€ã«ã§ã¯ãäžèœè¬ã§ã¯ãããŸããã ãã®å®çŸå¯èœæ§ã¯ãç¹å®ã®ãããžã§ã¯ãã®ç¹å®ã®ç¶æ³ã«äŸåããŸãã ãã ãããã®èšäºã§ã¯ããã®ã¢ãããŒãã®é·æãšçæã®åé¡ãæãäžããããšã¯ãããæ£ãã䜿çšããæ¹æ³ã«çŠç¹ãåœãŠãŸãã
æ¯èŒåºæº
ãã®ãããåœåã¯ãµããŒãããŠããªãèšèªã§OOPãšåŸæ¥ã®ç¶æ¿ã䜿çšããããšã«ããŸããã ãã®æ±ºå®ã¯ãå€ãã®å Žåãä»ã®èšèªã§OOPã«æ
£ããŠããéçºè
ã«ãã£ãŠå€§èŠæš¡ãããžã§ã¯ãã§è¡ãããŸãã ãŸããå€ãã®å€§èŠæš¡ãªãã¬ãŒã ã¯ãŒã¯ã§äœ¿çšãããŠããŸãïŒBackboneãEmber JSãªã©ãããã³ææ°ã®EcmaScript仿§ã
ç¶æ¿ã®é©çšã«é¢ããæåã®ã¢ããã€ã¹ã¯ãEcmaScript 6ã§èª¬æãããŠããããã«ãããŒã¯ãŒãclassãextendsãconstructorãªã©ãšãšãã«äœ¿çšããããšã§ãã ãã®ãããªæ©äŒãããå Žåã ããã«èªãããšã¯ã§ããŸãããããã¯ã³ãŒãã®èªã¿ããããšããã©ãŒãã³ã¹ã®ç¹ã§æè¯ã®ãªãã·ã§ã³ã§ãã 以äžã®èª¬æã¯ãã¹ãŠãES5ã䜿çšããŠãããžã§ã¯ããæ¢ã«éå§ãããŠãããæ°ããããŒãžã§ã³ãžã®ç§»è¡ãå©çšã§ããªãããã«æãããå Žåã«ãå€ã仿§ã䜿çšããå Žåã«åœ¹ç«ã¡ãŸãã
å€å
žçãªç¶æ¿ãå®è£
ããäžè¬çãªäŸãèŠãŠã¿ãŸãããã
5ã€ã®åŽé¢ã§åæããŸãã
- ã¡ã¢ãªå¹çã
- ããã©ãŒãã³ã¹ã
- éçããããã£ãšã¡ãœããã
- ã¹ãŒããŒã¯ã©ã¹ãžã®ãªã³ã¯ã
- åç²§åã®è©³çްã
ãã¡ããããŸãæåã«ã䜿çšãããã³ãã¬ãŒããã¡ã¢ãªãšããã©ãŒãã³ã¹ã®ç¹ã§å¹æçã§ããããšã確èªããå¿
èŠããããŸãã ãã®ç¹ã§äººæ°ã®ãããã¬ãŒã ã¯ãŒã¯ã®äŸã«é¢ããŠã¯ãç¹ã«äžæºã¯ãããŸããããå®éã«ã¯ã誀ã£ãäŸãã¡ã¢ãªãªãŒã¯ãã¹ã¿ãã¯ã®æé·ã«ã€ãªããããšããããããŸããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
ãªã¹ããããŠããæ®ãã®åºæºã¯ãã³ãŒãã®äœ¿ãããããšèªã¿ãããã«é¢ãããã®ã§ãã
æ§æãšæ©èœãä»ã®èšèªã®å€å
žçãªç¶æ¿ã«ããè¿ãå®è£
ããããã䟿å©ãªããã®ãšèããŸãã ãã®ãããã¹ãŒããŒã¯ã©ã¹ïŒããŒã¯ãŒãsuperïŒãžã®ãªã³ã¯ã¯ãªãã·ã§ã³ã§ãããç¶æ¿ã®å®å
šãªãšãã¥ã¬ãŒã·ã§ã³ã«ã¯ãã®ååšãæãŸããã§ãã è£
食çãªè©³çްãšã¯ãã³ãŒãã®äžè¬çãªèšèšããããã°ã®å©äŸ¿æ§ã
instanceof
æŒç®åã®äœ¿çšãªã©ãæå³ã
instanceof
ã
Babelã®_inherits颿°
EcmaScript 6ã®ç¶æ¿ãšãBabelã䜿çšããŠES5ã§ã³ãŒããã³ã³ãã€ã«ãããšãã«åŸããããã®ãèæ
®ããŠãã ããã
以äžã¯ãES6ã®ã¯ã©ã¹æ¡åŒµã®äŸã§ãã
class BasicClass { static staticMethod() {} constructor(x) { this.x = x; } someMethod() {} } class DerivedClass extends BasicClass { static staticMethod() {} constructor(x) { super(x); } someMethod() { super.someMethod(); } }
ã芧ã®ãšãããæ§æã¯ä»ã®OOPèšèªã«äŒŒãŠããŸãããåãšã¢ã¯ã»ã¹ä¿®é£Ÿåããªãããšãé€ããŠèããããŸãã ãããŠãããã¯ã³ã³ãã€ã©ãŒã§ES6ã䜿çšããããšã®ãŠããŒã¯ãã§ãã䟿å©ãªæ§æã賌å
¥ããäœè£ããããåæã«åºåã§ES5ã§åäœããã³ãŒããååŸã§ããŸãã æ¬¡ã®äŸã¯ã©ããããã®ãããªæ§æã®åçŽããèªã£ãŠããŸããã ãããã§ã¯ãç¶æ¿é¢æ°ã¯æ§æå€æãªãã§ã宿ãããã©ãŒã ã§ããã«å®è£
ãããŸãã
Babelã³ã³ãã€ã©ã¯ãåçŽãª
_inherits
颿°ã䜿çšããŠç¶æ¿ãå®è£
ããŸãã
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
ããã§ã®äž»ãªãã€ã³ãã¯ã次ã®è¡ã«çž®å°ã§ããŸãã
subClass.prototype = Object.create(superClass.prototype);
ãã®åŒã³åºãã¯ãæå®ããããããã¿ã€ãã§ãªããžã§ã¯ããäœæããŸãã
subClass
ã³ã³ã¹ãã©ã¯ã¿ãŒã®
prototype
ããããã£ã¯ããã®ãããã¿ã€ãã
superclass
芪ã¯ã©ã¹ã®
prototype
ã§ããæ°ãããªããžã§ã¯ããæããŸãã ãããã£ãŠãããã¯ããœãŒã¹ã³ãŒãã§å€å
žãšããŠåœè£
ãããåçŽãªãããã¿ã€ãç¶æ¿ã§ãã
次ã®ã³ãŒãè¡ã¯ãã¯ã©ã¹ã®éçãã£ãŒã«ãã®ç¶æ¿ãå®è£
ããŠããŸãã
Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
芪ã¯ã©ã¹ïŒã€ãŸãã颿°ïŒã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãæ°ããã¯ã©ã¹ïŒã€ãŸããå¥ã®é¢æ°ïŒã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãããã¿ã€ãã«ãªããŸãã ãããã£ãŠã芪ã¯ã©ã¹ã®ãã¹ãŠã®éçããããã£ãšã¡ãœããã¯ã掟çã¯ã©ã¹ããå©çšå¯èœã«ãªããŸãã
setPrototypeOf
颿°ããªãå Žå
setPrototypeOf
Babelã¯
__proto__
衚瀺ã®
__proto__
ããããã£ãžã®ãããã¿ã€ãã®çŽæ¥æžã蟌ã¿ãæäŸããŸãããã®ææ³ã¯æšå¥šãããŸããããå€ããã©ãŠã¶ãŒã䜿çšããå Žåã®æåŸã®ææ®µãšããŠé©ããŠããŸãã
éçããã³åçã®äž¡æ¹ã®ã¡ãœããã®èšé²ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯ãã®
prototype
ãžã®åç
§ãåã«ã³ããŒããããš
_inherits
ã
_inherits
åŒã³åºããšã¯å¥ã«è¡ãããŸãã ç¬èªã®ç¶æ¿å®è£
ãäœæããå Žåããã®äŸãåºç€ãšããŠäœ¿çšãã
_inherits
颿°ãžã®è¿œå åŒæ°ãšããŠåçããã³éçãã£ãŒã«ããæã€ãªããžã§ã¯ãã远å ã§ããŸãã
superããŒã¯ãŒãã¯ãçŽæ¥ãããã¿ã€ãåŒã³åºããã³ã³ãã€ã«ãããšãã«åçŽã«çœ®ãæããããŸãã ããšãã°ãäžèšã®äŸãã芪ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºããšã次ã®è¡ã«çœ®ãæããããŸãã
return _possibleConstructorReturn(this, (DerivedClass.__proto__ || Object.getPrototypeOf(DerivedClass)).call(this, x));
Babelã¯ãããã§ã¯åãäžããªãå€ãã®ãã«ããŒé¢æ°ã䜿çšããŸãã äžçªäžã®è¡ã¯ããã®åŒã³åºãã§ã€ã³ã¿ãŒããªã¿ãŒãçŸåšã®ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãããã¿ã€ãïŒåºæ¬ã¯ã©ã¹ïŒäžèšåç
§ïŒã®ã³ã³ã¹ãã©ã¯ã¿ãŒïŒãååŸãã
this
çŸåšã®ã³ã³ããã¹ãã§åŒã³åºããŸãã
çŽç²ãªES5ã§ã®ç¬èªã®å®è£
ã§ã¯ãã³ã³ãã€ã«ã¹ããŒãžã¯äœ¿çšã§ããŸããããããã£ãŠã芪ã¯ã©ã¹ãžã®äŸ¿å©ãªåç
§ãåŸãããã«ãã³ã³ã¹ãã©ã¯ã¿ãŒãšãã®
prototype
ã«
_super
ãã£ãŒã«ãã远å ã§ããŸãã
function extend(subClass, superClass) {
Backbone JSã®æ¡åŒµæ©èœ
Backbone JSã¯ãã¢ãã«ããã¥ãŒãã³ã¬ã¯ã·ã§ã³ãªã©ã®ã©ã€ãã©ãªã¯ã©ã¹ã
extend
ãã
extend
æ©èœãæäŸããŸãã ãåžæã®å Žåã¯ãç¬èªã®ç®çã®ããã«åããããšãã§ããŸãã 以äžã¯ãBackbone 1.3.3ã®æ©èœ
extend
ã³ãŒãã§ãã
var extend = function(protoProps, staticProps) { var parent = this; var child;
䜿çšäŸã¯æ¬¡ã®ãšããã§ãã
var MyModel = Backbone.Model.extend({ constructor: function() {
ãã®é¢æ°ã¯ãç¬èªã®ã³ã³ã¹ãã©ã¯ã¿ãŒãšéçãã£ãŒã«ãããµããŒãããåºæ¬ã¯ã©ã¹ã®æ¡åŒµæ©èœãå®è£
ããŸãã ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãè¿ããŸãã Babelã®äŸãšåæ§ã«ãç¶æ¿èªäœã¯æ¬¡ã®è¡ã§å®è£
ãããŸãã
child.prototype = _.create(parent.prototype, protoProps);
_.create()
颿°ã¯ãUnderscore JSã©ã€ãã©ãªã«ãã£ãŠå®è£
ãããES6ã®
Object.create()
é¡äŒŒããŠããŸãã 2çªç®ã®åŒæ°ã«ããã
extend
颿°ãåŒã³åºããããšãã«æž¡ããã
protoProps
ããããã£ãšã¡ãœãããããã«ãããã¿ã€ãã«æžã蟌ãããšãã§ããŸãã
ã¯ã©ã¹ã®éçãã£ãŒã«ãã®ç¶æ¿ã¯ã芪ã¯ã©ã¹ããã®åç
§ïŒãŸãã¯å€ïŒãšãäœæãããã³ã³ã¹ãã©ã¯ã¿ãŒãžã®extend颿°ãžã®2çªç®ã®åŒæ°ãšããŠæž¡ãããéçãã£ãŒã«ããæã€ãªããžã§ã¯ããåã«ã³ããŒããããšã§å®çŸãããŸãã
_.extend(child, parent, staticProps);
ã³ã³ã¹ãã©ã¯ã¿ãŒåç
§ã¯ãªãã·ã§ã³ã§ãããã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœããã®åœ¢åŒã§ã¯ã©ã¹å®£èšå
ã§è¡ãããŸãã ããã䜿çšãããšãã¯ãïŒä»ã®èšèªã®ããã«ïŒå¿
ã芪ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãå¿
èŠãããããã代ããã«ãéçºè
ã¯å€ãã®å Žåã芪ã³ã³ã¹ãã©ã¯ã¿ãŒå
ããèªåçã«åŒã³åºããã
initialize
ã¡ãœããã䜿çšã
initialize
ã
ããŒã¯ãŒãã__super__ãã¯åãªã䟿å©ãªè¿œå ã§ãã 芪ã¡ãœãããžã®åŒã³åºãã¯ãç¹å®ã®ã¡ãœããã®ååãšãã³ã³ããã¹ã
this
転éã§åŒãç¶ãçºçããŸãã ããããªããã°ããã®ãããªèª²é¡ã¯ãç¶æ¿ã®ãã«ãã¬ãã«ãã§ãŒã³ã®å Žåã«ã«ãŒãã«ã€ãªãããŸãã éåžžãçŸåšã®ã³ã³ããã¹ãã§ååãç¥ãããŠããã¹ãŒããŒã¯ã©ã¹ã¡ãœããã¯çŽæ¥åŒã³åºãããšãã§ããããããã®ããŒã¯ãŒãã¯ä»¥äžã®ç¥èªã«ãããŸããã
Backbone.Model.prototype.toJSON.apply(this, arguments);
ã³ãŒãã®èгç¹ããèŠããšãBackboneã§ã¯ã©ã¹ãæ¡åŒµããã®ã¯ããªãç°¡åã§ãã ã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒãæåã§äœæãã芪ã¯ã©ã¹ã«åå¥ã«ãã€ã³ãããå¿
èŠã¯ãããŸããã ãã®äŸ¿å©ãã«ã¯ä»£åã䌎ããŸã-ãããã°ã®é£ããã ãã©ãŠã¶ãŒãããã¬ãŒã§ã¯ããã®æ¹æ³ã§ç¶æ¿ãããã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¯ã
extend
"child"颿°å
ã§å®£èšãããåãã³ã³ã¹ãã©ã¯ã¿ãŒåãæã¡ãŸãã ãã®æ¬ ç¹ã¯ãã¯ã©ã¹ã®ãã§ãŒã³ããããã°ãããšãã«å®éã«ééãããŸã§ãç¹å®ã®ãªããžã§ã¯ããã©ã®ã¯ã©ã¹ã§ãããã©ã®ã¯ã©ã¹ããç¶æ¿ãããŠããããçè§£ããããšãå°é£ã«ãªããŸã§ãéèŠã§ã¯ãªãããã«æãããå ŽåããããŸãïŒ

ããã«äŸ¿å©ãªããšã«ããã®ãã§ãŒã³ã¯Babelããã®ç¶æ¿ã䜿çšããŠãããã°ãããŸãã

ãã1ã€ã®æ¬ ç¹ã¯ã
constructor
ããããã£ãåæå¯èœã§ããããšã§ãã for-inã«ãŒãã§ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãèµ°æ»ãããšãã«åæãããŸãã ããã¯éèŠã§ã¯ãããŸããããBabelã¯ãããåŠçããå¿
èŠãªä¿®é£Ÿåããªã¹ãããã³ã³ã¹ãã©ã¯ã¿ãŒã宣èšããŸããã
Ember JSã®ã¹ãŒããŒã¯ã©ã¹åç
§
Ember JSã¯Babelã«ãã£ãŠå®è£
ããã
inherits
颿°ãšç¬èªã®
extend
å®è£
ã®äž¡æ¹ã䜿çšããŸã-éåžžã«è€éã§æŽç·ŽãããŠãããmixinãªã©ããµããŒãããŸãã ãã®èšäºã«ãã®é¢æ°ã®ã³ãŒããå
¥ããã ãã®ååãªã¹ããŒã¹ããªãããããã¬ãŒã ã¯ãŒã¯å€ã§ç¬èªã®ããŒãºã«äœ¿çšããå Žåããã®ããã©ãŒãã³ã¹ã«ãã§ã«çåãæããããŠããŸãã
ç¹ã«è峿·±ãã®ã¯ãEmberã®ãã¹ãŒããŒãããŒã¯ãŒãã®å®è£
ã§ãã ããã«ãããç¹å®ã®ã¡ãœããåãæå®ããã«èŠªã¡ãœãããåŒã³åºãããšãã§ããŸããæ¬¡ã«äŸã瀺ããŸãã
var MyClass = MySuperClass.extend({ myMethod: function (x) { this._super(x); } });
泚ïŒã¹ãŒããŒã¯ã©ã¹ã¡ãœããïŒ
this._super(x)
ïŒãåŒã³åºããšããã¡ãœããã®ååã¯æå®ããŸããã ãŸããã³ã³ãã€ã«äžã«ã³ãŒã倿ã¯çºçããŸããã
ã©ã®ããã«æ©èœããŸããïŒ Emberã¯ãã³ãŒã倿ãªãã§ãžã§ããªãã¯
_super
ããããã£ã«ã¢ã¯ã»ã¹ãããšãã«åŒã³åºãã¡ãœãããã©ã®ããã«
_super
ã§ããïŒ ããã¯ãã¹ãŠãã¯ã©ã¹ãšããªãããŒãªé¢æ°
_wrap
ã®è€éãªäœæ¥ã«é¢ãããã®
_wrap
ããã®ã³ãŒãã以äžã«ç€ºããŸãã
function _wrap(func, superFunc) { function superWrapper() { var orig = this._super; this._super = superFunc;
ã¯ã©ã¹ãç¶æ¿ããããšãEmberã¯ãã¹ãŠã®ã¡ãœãããééããããããã«å¯ŸããŠç¹å®ã®ã©ãããŒé¢æ°ãåŒã³åºããå
ã®å颿°ã
superWrapper
ãŸãã
ã³ã¡ã³ããä»ããŠããè¡ã«æ³šæããŠãã ããã
_super
ããããã£ã«ã¯ãåŒã³åºãããã¡ãœããã®ååã«å¯Ÿå¿ãã芪ã¡ãœãããžã®ãã€ã³ã¿ãŒãæžã蟌ãŸããŸãïŒ
extend
åŒã³åºããããšãã«ã¯ã©ã¹ãäœæããæ®µéã§ã察å¿ã倿ããäœæ¥ãçºçããŸããïŒã 次ã«ãå
ã®é¢æ°ãåŒã³åºããããããã芪ã¡ãœãããšããŠ
_super
ã¢ã¯ã»ã¹ã§ããŸãã æ¬¡ã«ã
_super
ããããã£ã«å
ã®å€
_super
å²ãåœãŠããããããæ·±ãåŒã³åºããã§ãŒã³ã§äœ¿çšã§ããŸãã
ãã®ã¢ã€ãã¢ã¯ééããªãè峿·±ããã®ã§ãããç¶æ¿ã®å®è£
ã«é©çšã§ããŸãã ããããããããã¹ãŠãããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžããããšã«æ³šæããããšãéèŠã§ãã åã¯ã©ã¹ã¡ãœããïŒèŠªã¡ãœããããªãŒããŒã©ã€ãããå°ãªããšã1ã€ïŒã¯ã
_super
ããããã£ã䜿çšãããšããäºå®ã«é¢ä¿ãªããåå¥ã®é¢æ°ã«å€ãããŸãã ãããã£ãŠã1ã€ã®ã¯ã©ã¹ã®ã¡ãœããåŒã³åºãã®æ·±ããã§ãŒã³ã«ãããã¹ã¿ãã¯ã倧ãããªããŸãã ããã¯ãã«ãŒãå
ã§å®æçã«åŒã³åºãããã¡ãœãããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¬ã³ããªã³ã°ãããšãã«ç¹ã«éèŠã§ãã ãããã£ãŠããã®å®è£
ã¯é¢åã§ãããèšé²ã®ç瞮圢ãšãã圢ã§åŸãããå©ç¹ãæ£åœåã§ããªããšèšããŸãã
æãäžè¬çãªééã
å®éã«æãäžè¬çã§å±éºãªééãã®1ã€ã¯ã芪ã¯ã©ã¹ãå±éããããšãã«ã€ã³ã¹ã¿ã³ã¹ãäœæããããšã§ãã ãã®ãããªã³ãŒãã®äŸã次ã«ç€ºããŸãããã®ã³ãŒãã®äœ¿çšã¯åžžã«é¿ããå¿
èŠããããŸãã
function BaseClass() { this.x = this.initializeX(); this.runSomeBulkyCode(); }
ééãã«æ°ã¥ããŸãããïŒ
ãã®ã³ãŒãã¯æ©èœãã
ãµãã¯ã©ã¹ã芪ã¯ã©ã¹ã®ããããã£ãšã¡ãœãã
ãç¶æ¿ã§ããããã«ã
ãŸã ã ãã ãã
prototype
ãä»ããã¯ã©ã¹ãã€ã³ãã£ã³ã°äžã«ã芪ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããŸããããã«ãããç¹ã«ã³ã³ã¹ãã©ã¯ã¿ãŒããªããžã§ã¯ãïŒ
runSomeBulkyCode ïŒã®äœææã«å€ãã®äœæ¥ãè¡ãå ŽåãäžèŠãªã¢ã¯ã·ã§ã³ãçºçããŸãã
ããã¯ã§ããŸããã
SubClass.prototype = new BaseClass();
ããã«ããã芪ã³ã³ã¹ãã©ã¯ã¿ãŒïŒ
this.x
ïŒã§åæåãããããããã£ãæ°ããã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªãã
SubClassã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã®ãããã¿ã€ãã«æžã蟌ãŸãããšãéå€§ãªæ€åºå¯èœãšã©ãŒãçºçããå¯èœæ§ããããŸãã ããã«ãåã
BaseClassã³ã³ã¹ãã©ã¯ã¿ãŒããµãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒããç¹°ãè¿ãåŒã³åºãããŸãã åŒã³åºãæã«èŠªã³ã³ã¹ãã©ã¯ã¿ãããã€ãã®ãã©ã¡ãŒã¿ãå¿
èŠãšããå Žåããã®ãããªãšã©ãŒãäœæããããšã¯å°é£ã§ãããããããååšããªãå Žåãããã¯éåžžã«å¯èœã§ãã
代ããã«ããããã¿ã€ãã芪ã¯ã©ã¹ã®ãããã¿ã€ãããããã£ã§ãã空ã®ãªããžã§ã¯ããäœæããŸãã
SubClass.prototype = Object.create(BasicClass.prototype);
ãŸãšã
Babelã³ã³ãã€ã©ïŒES6-to-ES5ïŒããã³Backbone JSãEmber JSã®ãã¬ãŒã ã¯ãŒã¯ã§ã®ç䌌å€å
žçç¶æ¿ã®å®è£
äŸã玹ä»ããŸããã 以äžã¯ãåè¿°ã®åºæºã«ãã3ã€ã®å®è£
ãã¹ãŠã®æ¯èŒè¡šã§ãã
| ããã« | ããã¯ããŒã³js | ãšã³ããŒjs |
---|
èšæ¶ | åæ§ã« |
---|
æ§èœ | ããé«ã | å¹³å | äž |
---|
éçãã£ãŒã«ã | + ïŒES6ã®ã¿ïŒ* | + | - ïŒããã«ããã®ç¶æ¿ã®å
éšäœ¿çšãé€ãïŒ |
---|
ã¹ãŒããŒã¯ã©ã¹ãªã³ã¯ | super.methodName() ïŒES6ã®ã¿ïŒ | Constructor.__super__.prototype .methodName.apply(this) | this._super() |
---|
åç²§åã®è©³çް | ES6ã«æé©ã§ãã ES5ã§ã®ç¬èªã®å®è£
ã«æ¹è¯ãå¿
èŠ | çºè¡šã®äŸ¿å©ãã ãããã°ã®åé¡ | ç¶æ¿ã®æ¹æ³ã«äŸåããŸãã ããã¯ããŒã³ãšåããããã°åé¡ |
---|
*-ES6ã䜿çšããå ŽåãBabelã¢ããªã±ãŒã·ã§ã³ãçæ³çã§ãã ES5ã«åºã¥ããŠå®è£
ãèšè¿°ããå Žåãéçãã£ãŒã«ããšã¹ãŒããŒã¯ã©ã¹ãžã®ãªã³ã¯ãåå¥ã«è¿œå ããå¿
èŠããããŸããããã©ãŒãã³ã¹åºæºã¯ã絶察å€ã§ã¯ãªããåããªã¢ã³ãã®æäœãšãµã€ã¯ã«ã®æ°ã«åºã¥ããŠãä»ã®å®è£
ãšæ¯èŒããŠè©äŸ¡ãããŸããã äžè¬ã«ãããã©ãŒãã³ã¹ã®éãã¯ããã»ã©éèŠã§ã¯ãããŸããã ã¯ã©ã¹ã®æ¡åŒµã¯éåžžãã¢ããªã±ãŒã·ã§ã³ã®åææ®µéã§1åçºçããå床åŒã³åºãããããšã¯ãããŸããã
äžèšã®äŸã«ã¯ãã¹ãŠé·æãšçæããããŸãããããã«ã®å®è£
ãæãå®çšçã§ãããšèããããšãã§ããŸãã äžèšã®ããã«ãå¯èœã§ããã°ãES5ã§ã®ã³ã³ãã€ã«ã§EcmaScript 6ã§æå®ãããç¶æ¿ã䜿çšããŸãã ãããäžå¯èœãªå Žåãäžèšã®ã³ã¡ã³ããšä»ã®äŸããã®è¿œå ãèæ
®ããŠãBabelã³ã³ãã€ã©ãŒã®äŸã«åºã¥ããŠã
extend
颿°ã®å®è£
ãèšè¿°ããããšããå§ãããŸãã ãã®ãããç¹å®ã®ãããžã§ã¯ãã«æãæè»ã§é©åãªæ¹æ³ã§ç¶æ¿ãå®è£
ã§ããŸãã
ãœãŒã¹
- JavaScript.ruïŒç¶æ¿
- ããããã»ã·ã£ãªãã JavaScriptç¶æ¿ãã¿ãŒã³
- ãšãªãã¯ã»ãšãªãªãã 3çš®é¡ã®ãããã¿ã€ãç¶æ¿ïŒES6 +ãšãã£ã·ã§ã³
- ãŠã£ãããã£ã¢ïŒç¶æ¿ãããæ§æ
- Mozillaéçºè
ãããã¯ãŒã¯ïŒObject.prototype
- ããã¯ããŒã³js
- ãšã³ããŒjs
- ããã«