|
$B%^%/%m%a%G%#%"$N%I%-%e%a%s%H$G$O!"7Q>5$r3NN)$9$k$d$jJ}$O0J2<$N$h$&$K$J$k(B: SubClass.prototype = new SuperClass();
$B$3$N9T$G9T$o$l$F$$$k$N$O!"(BSubClass$B$N(Bprototype$B%*%V%8%'%/%H$r(BSuperClass$B$N?75,%$%s%9%?%s%9$K@_Dj$9$k$H$$$&$3$H$@!#(B
SuperClass$B$N%$%s%9%?%s%9$K$*$1$kA4$F$N%W%m%Q%F%#$H%a%=%C%I$,(BSubClass$B$N(Bprototype$B%A%'!<%s$K3d$jEv$F$i$l$k(B - $B$h$C$F(BSubClass$B$NA4$F$N%$%s%9%?%s%9$,(BSuperClass$B%$%s%9%?%s%9$N%W%m%Q%F%#$H%a%=%C%I$K%"%/%;%9$9$k$3$H$,$G$-$k!#(B
$B$3$3$G$O!"$3$N9=J8$NA0$KDj5A$5$l$?(BSubClass$B!J%3%s%9%H%i%/%?4X?t!K$KLa$C$F8+$F$_$h$&!#(Bfunction$B$,Dj5A$5$l$?$N$,$$$D$G$"$l!J8F$S=P$5$l$kA0$G$b!K$$$/$D$+$N%W%m%Q%F%#$O<+F0E*$KM?$($i$l$k!#(B
$B$=$l$i$N%W%m%Q%F%#$N0l$D$,(Bprototype$B$@!#(B
prototype$B%*%V%8%'%/%H$b<+J,<+?H$N%W%m%Q%F%#$r;}$C$F$$$k!#%I%-%e%a%s%H$K=q$+$l$F$$$k%W%m%Q%F%#$O(B: constructor$B$H(B
__proto__$B$G$"$k!#(Bconstructor$B%W%m%Q%F%#$O(BSubClass$B<+BN$r;2>H$7$F$*$j!"(B__proto__$B$O(BSubClass$B$N%9!<%Q!<%/%i%9$N(Bprototype$B%*%V%8%'%/%H$r;2>H$7$F$$$k!#(B
$B:.Mp$7$?$+$J!)(B $BBg>fIW(B - $B
SubClass$B$,Dj5A$5$l$?$H$-!"$=$N(BSubClass$B$N%9!<%Q!<%/%i%9$H$O2?$+!)(B $B%G%U%)%k%H$G$O!"A4$F$N%*%V%8%'%/%H$O%9!<%Q!<%/%i%9$H$7$F(B
Object$B!JBgJ8;z(B'O'$B$N!K$r7Q>5$7$F$$$k!#$h$C$F(B
SubClass.prototype.__proto__$B$O(B
Object.prototype$B$r;2>H$7$F$$$k!#(B
$B$=$l$G$O!"SubClass$B$N(Bprototype$B%*%V%8%'%/%H$K$O2?$,5/$3$k$+!)(B
SubClass.prototype = new SuperClass();
constructor$B$H(B__proto__$B$NN>J}$,?7$7$$CM$G>e=q$-$5$l$k!#$=$l$i$N?7$7$$CM$NFbMF$Oconstructor$B$O(BSuperClass$B$r;2>H$7!"(B
__proto__$B$O(BSuperClass.prototype$B$r;2>H$9$k!#$7$+$7!"(B
SubClass$B%$%s%9%?%s%9$N(Bconstructor
$B$O(BSuperClass$B$G$O(B$B$J$/(BSubClass$B$G$"$k$Y$-$@!#(B
SubClass.prototype = new SuperClass();
// $B
trace(SubClass.prototype.constructor == SubClass); // false
trace(SubClass.prototype.constructor == SuperClass); // true
trace(SubClass.prototype.__proto__ == Object.prototype); // false
trace(SubClass.prototype.__proto__ == SuperClass.prototype); // true
Flash 5$B$K$*$1$k7Q>5$G(B'new'$B$r;H$&$K$O$$$/$D$+LdBj$,$"$k(B:
constructor $B%W%m%Q%F%#$,@5$7$/$J$$!J(B
SuperClass$B$G$J$/(BSubClass$B$r;2>H$9$k!K!#(B
SuperClass$B$N(Bconstructor$B$r5MQ$N%$%s%9%?%s%9$r@8@.$9$k!#(B
$B$3$l$K$O(B3$B$D$NI{:nMQ$,$"$k(B:
a) $B%9!<%Q!<%/%i%9$N?75,%$%s%9%?%s%9$rJ]B8$9$k$?$a$KM>7W$K%a%b%j$,;H$o$l$k!#(B
b) $B%9!<%Q!<%/%i%9!?%5%V%/%i%94X78$N9M$(J}$KH?$7$F$$$k!'(B $B%5%V%/%i%9$,%9!<%Q!<%/%i%9$G$J$/%9!<%Q!<%/%i%9$N%$%s%9%?%s%9$r7Q>5$7$F$$$k!#(B
c) $B%9!<%Q!<%/%i%9$N%3%s%9%H%i%/%?$,I,MW$b$J$$$N$Knew'$B@k8@$O$=$l$rBfL5$7$K$7$F$7$^$&!#Nc$($P(B:
function SuperClass(x, y) {
// Static$B!J%/%i%9!K%W%m%Q%F%#(B
SuperClass.invokeCount++;
this.x = x;
this.y = y;
}
SuperClass.invokeCount = 0; // static$B%W%m%Q%F%#$r=i4|2=(B
SuperClass.prototype.superMethod = function() {
trace("this.x"+ this.x +", this.y:"+ this.y);
}
//------------------------------------------------------------------------
function SubClass(x, y, z) {
// SuperClass$B$N%W%m%Q%F%#$r7Q>5!"=i4|2=(B
this.tmpBase = SuperClass;
this.tmpBase(x, y);
delete this.tmpBase;
this.z = z;
}
trace(SubClass.prototype.__proto__ == Object.prototype); // true
SubClass.prototype = new SuperClass();
trace(SubClass.prototype.__proto__ == Object.prototype); // false
trace(SubClass.prototype.__proto__ == SuperClass.prototype); // true
SubClass.prototype.subMethod = function() {
trace("this.z"+ this.z);
}
//------------------------------------------------------------------------
var o = new SubClass('X','Y','Z'); $B$3$3$G$O(B o.constructor
== SuperClass $B$@$,!"$3$l$O(BSubClass$B$K$J$k$Y$-$@!#$^$?!"(B
SuperClass.invokeCount$B$O(B1$B$G$O$J$/(B2$B$@!#(B
- Flash 5$B$O!"(B'
new'$B$r;H$&$H!"(BFOR..IN$B%k!<%W;HMQCf$K%W%m%Q%F%#$N=EJ#$,5/$3$k%P%0$,$"$k!#(B for (var p in o) {
trace(p +":"+ o[p]);
}
$B=PNO(B: ------- subMethod: superMethod: y:Y x:X z:Z y:Y x:X
- $B8m$C$F(B'
new'$B@k8@$,$=$N%/%i%9$N(B
prototype$BDj5A$N8e$KCV$+$l$F$7$^$C$?$i!"(B
prototype$BFb$NA4$F$N$b$N$,>C$75n$i$l$k(B:
SubClass.prototype.subMethod = function() {
trace("this.z"+ this.z);
}
SubClass.prototype = new SuperClass();subMethod()
$B$,L5$/$J$C$F$7$^$&(B!
$B$3$NLdBj$r2r7h$9$k$?$a$K$O!"7Q>5$KJL$NJ}K!$rMQ$$$k(B:
$B$3$N9T$r(B:
SubClass.prototype = new SuperClass();
$B$3$N$h$&$KJQ$($k(B:
SubClass.prototype.__proto__ = SuperClass.prototype;
$B$3$N0l9T$rJQ$($k$@$1$GA4$F$NLdBj$,2r7h$5$l$k(B!
$B$3$N9T$O(BSubClass$B$N(B__proto__
$B%W%m%Q%F%#$r(BSuperClass$B$N(Bprototype$B$K@_Dj$9$k$3$H$G!"(BSubClass$B$H(BSuperClass$B$N4V$N%j%s%/$r@_Dj$9$k!#(BSuperClass$B$N(B
prototype$B%A%'!<%s$K$"$kA4$F$N%a%=%C%I!J$b$7$"$l$P%W%m%Q%F%#$b!K$,$3$l$G(B
SubClass$B$N(Bprototype$B$rDL$8$F%"%/%;%9$G$-$k$h$&$K$J$k!#$3$l$,(Bprototype$B%Y!<%9$N7Q>5$N4pK\F0:n$G$"$k!#(B
Flash MX$B$G$O$I$&$@$m$&(B?
$B>e$N%j%9%H$G5s$2$i$l$?LdBj$N$$$/$D$+$O(BFlash MX$B$G=$@5$5$l$?(B:
SubClass
$B%$%s%9%?%s%9(B$B$N(Bconstructor$B%W%m%Q%F%#$,(BSubClass$B$r@5$7$/;2>H$9$k$h$&$K$J$C$F$$$k!#$7$+$7!"(B
$B7Q>5$N@_Dj$K(B'new'$B9=J8$,;H$o$l$k>l9g$O!"(BSubClass.prototype.constructor$B$O$^$@(BSuperClass$B$r;2>H$7$F$$$k!#(B
FOR..IN$B%k!<%W$K$*$1$k%W%m%Q%F%#=EJ#$N%P%0$O=$@5$5$l$?!#(B
constructor$B%W%m%Q%F%#$N;2>H$,@5$7$$7k2L$rJV$9!#(B
Flash MX$B$G(B
'new'$B$r;H$&>l9g$KLdBj$,$$$/$D$+;D$C$F$$$k(B:
- $B7Q>5$K(B'
new'$B$r;H$&$H$d$O$j(Bconstructor$B$,I,MW$b$J$$$N$K
- '
new'$B$r;HMQ$7$?8e$N(BSubClass.prototype.constructor
$B$,@5$7$/(B
SuperClassSuperClass$B$r;2>H$7$F$/$l$J$$!#(B
- $B7Q>5$r3NN)$9$k$?$a$K(B
__proto__$B$r;H$&$H!"(B
super$B1i;;;R$,(Bconstructor$BFb$G(B$B<:GT$9$k!#0J2<$K2r7hK!$r<($9(B:
- constructor$BFb$G(B
super$B$r;H$&$N$G$O$J$/!"%9!<%Q!<%/%i%9$N%W%m%Q%F%#$r7Q>5$9$k=>Mh$N(BFlash 5$B%a%=%C%I$r;H$&(B:
this.tmpBase = SuperClass;
this.tmpBase(args);
delete this.tmpBase;
extend()$B%a%=%C%I$r;H$&!J(B
'extends'$B$H$$$&(B's',$B$NIU$$$?C18l$O>-Mh$N;HMQ$N$?$a$KM=Ls$5$l$F$$$k!K!#$3$l$O%I%-%e%a%s%H2=$5$l$F$$$J$$(B__constructor__$B%W%m%Q%F%#$r;HMQ$7$F$$$k!#$3$N%a%=%C%I$O%3%s%9%H%i%/%?$G$N(Bsuper()$B$N;HMQ$r%5%]!<%H$7$F$$$k!#(B: Function.prototype.extend = function(superClass) {
this.prototype.__proto__ = superClass.prototype;
this.prototype.__constructor__ = superClass;
ASSetPropFlags(this.prototype, ["__constructor__"], 1);
};
ASSetPropFlags(Function.prototype, ["extend"], 1);
SuperClass = function(a) {
this.a = a;
};
SubClass = function(a, b) {
super(a);
this.b = b;
};
SubClass.extend(SuperClass);
$B$=$l$G$O$I$N%a%=%C%I$r;H$&$Y$-$+!)(B
Flash 5$B$G$O!">e$G=R$Y$??'!9$JLdBj$+$i!"(B__proto__$B$r;H$&$N$,$h$j4V0c$$$N$J$$A*Br$@!#(B
Flash MX$B$G$O!"$3$l$O87$7$$A*Br$@!#!VI8=`!W$K=`5r$9$kI,MW$,$"$k$N$+(B? $B$"$k$$$O!"(Bprototype$B%A%'!<%s$KD>@\O"$J$C$F$$$k%/%i%94V$N4X78$rDj5A$9$k$3$H$K$h$jITI,MW$J%*!<%P!<%X%C%I$H%a%b%j$NO2Hq$rHr$1$kJ}$,$h$$$N$+(B?
'new'$B$r;H$&>l9g$N1#$5$l$?0U30$JItJ,$KBP=h$9$k$K$O(B
constructor$B%W%m%Q%F%#$,4{$K;H$o$l$F$$$k$J$i!"(B
'new'$B$r;H$C$?$=$N$9$08e$K$3$N$h$&$K@5$7$$(Bconstructor$B$K$9$3$H$,$G$-$k(B: SubClass.prototype.constructor =
SubClass;
- $B7Q>5$r;H$&>l9g%3%s%9%H%i%/%?Fb$G2?$rHr$1$k$Y$-$+$rCN$C$F$*$/!#$"$k$$$O!"(Bconstructor$BFb$N=i4|2=%3!<%I$r%P%$%Q%9$9$k%3!<%I$rDI2C$9$k!#(B
- Branden Hall$B$N(Bprotolink(2003/9/2$B8=:_!"%j%s%/@h$OB8:_$7$J$$(B)$B$K$h$k2r7hK!$r;n$7$F$_$k!#(B
'new'$B$r;H$&M}M3(B
$B>e$G<($5$l$?$h$&$JLdBj$,$"$k$K$b4X$o$i$:!";d$O(B
__proto__$B$r;H$o(B$B$J$$(B2$B$D$NM}M3$r5s$2$k$3$H$,$G$-$k(B:
__proto__$B%W%m%Q%F%#$O(BECMA-262$B$N;EMM$K4^$^$l$F$$$J$$!#(B
$B$3$l$O(BNetscape$B!J(BJavaScript$B!K$G$O;H$($k$,$=$l$h$j?7$7$$(BRhino$B!J(BJava$B$G%W%m%0%i%`$5$l$?(BJavaScript$B__proto__$B$OHr$1$k$Y$-$@!#(B
- Macromedia$B$N%I%-%e%a%s%H$d$B:GNI$N (pdf)$B!J(BPDF$B!K$O(BECMA-262$BI8=`$r?d>)$7$F$$$k!#(B
$B%3!<%G%#%s%0%9%?%$%k$rI8=`2=$7$F%3!<%I$,B>$N3+H/5%a%=%C%I$r%+%W%;%k2=$9$k$d$jJ}$,$"$k(B:
SubClass.extend(SuperClass); // $B>e5-$N(B
extend()$B%a%=%C%I$r;H$&(B
__proto__$B$r;H$&M}M3$,$"$k$+!)(B
__proto__$B%W%m%Q%F%#$O(BFlash MX$B$G?d>)$5$l$J$$$o$1$G$O(B$B$J$$(B$B!#ActionScript$B<-=q(B
$B$H(BFlash$B%X%k%W(B$B$N%^%K%e%"%kN>J}$G%I%-%e%a%s%H2=$5$l$F$$$k!#$3$l$O(Bprototype$B%A%'!<%s$K1h$C$?!"%/%i%9(B=$B%*%V%8%'%/%H4V$N:G$bD>@\E*$J%j%s%/$G$"$j!"EvJ,$O8eJ}8_49@-$N$?$a$K(BFlash$B$K;D$C$F$$$k$@$m$&!#(B
$B$b$&0l$D$NM}M3$O!"7Q>5$@$1$N$?$a$K%9!<%Q!<%/%i%9$N%$%s%9%?%s%9$rJ]B8$7$F%a%b%j$rL5BL$K$7$?$/$J$$$H$$$&$3$H$@!#(Bprototype$B%A%'!<%s$r7A@.$9$k$?$a$K%9!<%Q!<%/%i%9$H%5%V%/%i%9$N4V$N4XO"$rD>@\Dj5A$7$h$&!*(B $B$3$l$,FC$K=EMW$J$N$O!"$b$C$HJ#;($J%/%i%9$rMQ$$$?Bg$-$J%W%m%8%'%/%H$+$b$7$/$O%a%b%j$N@)8B$5$l$?>.$5$J%G%P%$%9$N>l9g$@!#(B
ActionScript$B$O(Bprototype$B%Y!<%9$N8@8l$J$N$G!"(B__proto__$B$N;EMM$rHr$1$k$N$O6Z$,DL$i$J$$!#$J$<$J$i(Bprototype$B$H(B__proto__$B$O(Bprototype$B%A%'!<%s$r7A@.$9$k$?$a$K8_$$$K0MB8$7$F$$$k$+$i$@!#$3$N%W%m%Q%F%#$N;HMQ$,A[Dj$5$l$F$$$J$$$J$i!"(BJScript$B$d(BECMAScript$B$N$h$&$K1#JC$9$k$+FI$_$@$7@lMQ$K$7$F$*$/$Y$-$@!#(B
$B$H$3$m$G!"$J$<(Bconstructor
$B%W%m%Q%F%#$,FI$_$@$7@lMQ$G$J$$$N$+9M$($?$3$H$,$"$k$@$m$&$+!)(B
$B$3$3$+$i$I$3$K?J$`$+!)(B
$B>e$G<($7$?$h$&$JLdBj$r9nI~$9$k$K$O!"%/%i%9%Y!<%9$N8@8l$,=u$1$K$J$k$@$m$&!#:G$b6a$$Microsoft's JScript .Net$B$@!#$3$l$O(BECMA-262 edition 4 proposal$B$K=`5r$7$F$$$k!#:#J}!"7Q>5$b;H$($k!#(Bedition 4($BBh;MHG(B)$B$K4p$E$$$?(BJavaScript$B!J(BECMAScript$B!K$NL$Mh$OLsB+$5$l$F$$$k!#(B
ActionScript$B$,$3$N$h$&$JJ}8~$K?J$_%/%i%9%Y!<%9$N%*%V%8%'%/%H$H7Q>5$rwish-flash@macromedia.com$B$K0U;VI=<($r$7$F$[$7$$!#(B
$B$3$A$i$b;2>H(B: Object
$B7Q>5(B, $B2>A[(BMovieClip
$B%/%i%9(B, static$B$J%W%m%Q%F%#$H%a%=%C%I(B
Flash$B$N&B%W%m%0%i%`Cf$3$l$i$NLdBj$rC5:w!"Ds5/$7$F$/$l$?(BBranden Hall, Colin Moock and
Robert Penner $B$K46OOP with ActionScript, ActionScript for Flash MX: The Definitive Guide, and Robert Penner's Programming Macromedia Flash MX$B!#$3$l$i$NK\$O$+$J$j$*4+$a$@$,!";d$,(BOOP$BK\$H(BRobert$B$NK\$NN>J}$G%F%/%K%+%k%(%G%#%?$G$"$j(BColin$B$NK\$G&BFIpJs$G$"$k$H$$$&E@$G:]N)$C$F$$$k$+$i$@!#(B |