JavaScript‚ÅJava•—‚ÉsuperƒNƒ‰ƒX‚ɃAƒNƒZƒX‚·‚郉ƒCƒuƒ‰ƒŠì‚Á‚½

https://github.com/ukyo/jssuper

¦Proxy‚ÆECMA5‚ªŽÀ‘•‚³‚ê‚��‚鏈—Œn‚Å“®‚©‚µ‚ĂˁB
’Ç‹L:prototypeƒ`ƒF[ƒ“‚Ésuper‚ª2‚—‚ނƃ‹[ƒv‚·‚é‚�}‚Æ‚É‹C‚ª‚‚��‚½EEE‚Ì‚¾‚¯‚ǁA‰ðŒˆ–@‚ª‚í‚©‚ç‚ñBsuper‚͈ê‰ñ‚¾‚¯‚ł�NŠè‚��‚µ‚Ü‚·(‚�}‚ê‚͂Ђǂ��)B

‚Ü‚ŸAƒ\[ƒXƒR[ƒh‚͂�}‚ꂾ‚¯‚È‚ñ‚Å‚·‚ªB‚µ‚©‚µ‚È‚ª‚çAƒvƒƒpƒeƒB‚¾‚Æsuper‚Á‚ď‘‚��‚Ä‚àˆê‰ž•½‹C‚È‚ñ‚Å‚·‚ˁEEEB
Object.defineProperty(Object.prototype, 'super', {
get: function() {
var superProto, method, constructor;

superProto = Object.getPrototypeOf(Object.getPrototypeOf(this));

method = function(rcvr, name) {
return superProto[name].bind(this);
}.bind(this);

constructor = function() {
superProto.constructor.apply(this, arguments);
}.bind(this);

return Proxy.createFunction({get: method}, constructor);
}
});

‚�}‚ñ‚Ȋ�L‚��‚ÅŽg‚¦‚Ü‚·Bextend‚·‚éŒn‚̃‰ƒCƒuƒ‰ƒŠ‚Å‚à•’Ê‚É“®‚­‚ÆŽv‚��‚Ü‚·B
function A(message) {
this.message = message;
}

function B() {
//super class‚̃Rƒ“ƒXƒgƒ‰ƒNƒ^‚ðŒÄ‚Ô
this.super('hello!');
}
B.prototype = Object.create(A.prototype);

A.prototype.foo = function() {
return '#' + this.message + '#';
};

B.prototype.foo = function() {
//super class‚̃ƒ\ƒbƒh‚ðŒÄ‚Ô
//‚à‚¿‚ë‚ñcall(this)‚µ‚È‚­‚Ä‚àOK
return '(' + this.super.foo() + ')';
};

var b = new B;
b.foo(); // '(#hello!#);'‚ª•Ô‚Á‚Ä‚­‚éB



posted by ‰E‹ž | javascript
blog comments powered by Disqus
�~

‚�}‚̍L‚Í90“úˆÈãV‚µ‚��‹LŽ–‚Ì“Še‚ª‚Ȃ�� ƒuƒƒO‚É•\Ž¦‚³‚ê‚�N‚è‚Ü‚·B