OSDN Git Service

jsbase.js変更にともなう書き換え
authorttwilb <ttwilb@users.sourceforge.jp>
Sun, 4 Aug 2013 01:59:41 +0000 (10:59 +0900)
committerttwilb <ttwilb@users.sourceforge.jp>
Sun, 4 Aug 2013 01:59:41 +0000 (10:59 +0900)
*.apply()の削除とprototypeの宣言の変更

ie対応?

www/corelib/classes/CharacterClass.js
www/corelib/classes/HorizonalScrollStageClass.js
www/corelib/classes/MovableStageObjectClass.js
www/corelib/jsbase.js

index a430696..58dc07c 100644 (file)
@@ -1,13 +1,11 @@
 
-var CharacterClass = function(ownerStage)
+var CharacterClass = function()
 {
-       CharacterClass.base.apply(this, [ownerStage]);
+
        
        //\83L\83\83\83\89\93Æ\8e©\82Ì\8b@\94\\81i\82½\82Æ\82¦\82Î\8dU\8c\82\82â\91\8a\8eè\82ª\93\96\82½\82Á\82Ä\82«\82½\82Æ\82«\82Ì\82 \82½\82è\94»\92è\82È\82Ç)
        
-}.extend(MovableStageObjectClass);
-
-CharacterClass.prototype = {
+}.extend(MovableStageObjectClass, [], {
        display: function(){
                //\8cÊ\82Ì\95`\89æ
                this.stage.mainContext.save();
@@ -19,6 +17,6 @@ CharacterClass.prototype = {
        },
        tick: function(){
                MovableStageObjectClass.prototype.tick.apply(this, []);
-       },
-};
+       }
+});
 
index 751c940..371239c 100644 (file)
@@ -1,7 +1,6 @@
 
 var HorizonalScrollStageClass = function()
 {
-       HorizonalScrollStageClass.base.apply(this , []);
        
        //\8c»\8dÝ\91\80\8dì\91Î\8fÛ\82É\82È\82Á\82Ä\82¢\82é\83L\83\83\83\89\83N\83^\81[\81B
        var /* OperatedCaracterClass */ OperatingCharacter;
index 3752cd8..537ced6 100644 (file)
@@ -1,7 +1,5 @@
-var MovableStageObjectClass = function(ownerStage)
+var MovableStageObjectClass = function()
 {
-       MovableStageObjectClass.base.apply(this , [ownerStage]);
-       
        this.movingSpeed = new Point2D(0, 0);
        //2 * hysteresis >= movingFriction\82Å\82 \82é\82±\82Æ\82ð\90\84\8f§\82·\82é\81B
        //\82»\82¤\82Å\82È\82¢\8fê\8d\87\81A\96\80\8eC\82Å\82Ì\8c¸\91¬\8cã\82É\8a®\91S\82É\92â\8e~\82Å\82«\82È\82¢\89Â\94\\90«\82ª\82 \82é\81B
@@ -9,12 +7,7 @@ var MovableStageObjectClass = function(ownerStage)
        this.hysteresis = this.movingFriction / 2;
        
        
-}.extend(StageObject);
-
-//child : CharacterClass
-
-MovableStageObjectClass.prototype = {
-       
+}.extend(StageObject, [], {
        tick: function(){
                //\96\80\8eC\8f\88\97\9d
                if(this.movingSpeed.x < -this.hysteresis){
@@ -58,5 +51,8 @@ MovableStageObjectClass.prototype = {
                
                this.display();
        }
-};
+);
+
+//child : CharacterClass
+
 
index cfc0c1b..4487d3e 100644 (file)
@@ -1,4 +1,117 @@
 
+// parent : \8cp\8f³\82µ\82½\82¢\83N\83\89\83X
+// args : \8cp\8f³\8e\9e\82É\90e\83N\83\89\83X\82Ì\83R\83\93\83X\83g\83\89\83N\83^\82É\93n\82µ\82½\82¢\88ø\90\94\82Ì\94z\97ñ
+// protos : (\8fÈ\97ª\89Â) prototype\82Æ\82µ\82Ä\90é\8c¾\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82ð\8ew\92è
+Function.prototype.extend = function(parent, args, protos)
+{
+       if(!args) args = [];
+
+       // \90e\83N\83\89\83X(obj)\82Ì\83v\83\8d\83g\83^\83C\83v\82ð\8eq\83N\83\89\83X\82Ì\83v\83\8d\83g\83^\83C\83v(p)\82É\93K\97p\82·\82é
+       var applyPrototypeFunc = function(obj, p)
+       {
+               if(obj.base) //obj\82Ì\90e\83N\83\89\83X\82ª\82¢\82é\82©\8am\94F
+               {
+                       //\90e\83N\83\89\83X\82ª\82¢\82½\82Ì\82Å\81A\82»\82ê\82ð\90æ\82Ép\82É\93K\97p
+                       applyPrototypeFunc(obj.base, p);
+               }
+               
+               for(var pp in obj.prototype)
+               {
+                       p[pp] = obj.prototype[pp];
+               }
+       };
+       
+       // \90e\83N\83\89\83X(obj)\82Ì\83\8d\81[\83J\83\8b\95Ï\90\94\82ð\8eq\83N\83\89\83X(c)\82É\93K\97p
+       var applyValsFunc = function(obj, c, arg)
+       {
+               if(obj.base) //obj\82Ì\90e\83N\83\89\83X\82ª\82¢\82é\82©\8am\94F
+               {
+                       //\90e\83N\83\89\83X\82ª\82¢\82½\82Ì\82Å\81A\82»\82ê\82ð\90æ\82Éc\82É\93K\97p
+                       applyValsFunc(obj.base, c, obj.baseArgs);
+               }
+               
+               // .extend\82Å\8dì\90¬\82·\82é\83N\83\89\83X\82É\82Í sourceFunc\82ª\91\8dÝ\82·\82é(\8c©\82©\82¯\82ÌFunction\82Æ\8fo\97Í\82³\82ê\82é\82à\82Ì\82ª\88Ù\82È\82é\82½\82ß)
+               if(obj.sourceFunc)
+               {
+                       obj.sourceFunc.apply(c, arg);
+               }else
+               {
+                       obj.apply(c, arg);
+               }
+       };
+
+       if(this instanceof Function && parent instanceof Function)
+       {
+               var child = this;               // \8eq\83N\83\89\83X\82Ì\8c³\82Ì\92è\8b`(function(){})\82ð\8ew\82·
+               var proto = null;               // \83C\83\93\83X\83^\83\93\83X\82Ì__proto__\82É\91ã\93ü\82³\82ê\82é\83v\83\8d\83g\83^\83C\83v
+               var func = function(){  // \8eÀ\8dÛ\82É\95Ô\82³\82ê\82é\8eq\83N\83\89\83X\82Ì\92è\8b`
+                       
+                       //proto\82ª\8dì\82ç\82ê\82Ä\82¢\82È\82©\82Á\82½\82ç(\8cv\8eZ\97Ê\8dí\8c¸\82Ì\82½\82ßproto\82Í\88ê\89ñ\82µ\82©\8dì\82ç\82È\82¢)
+                       if(proto === null)
+                       {
+                               //\82Ü\82¸\8eq\83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X\82Ì__proto__\82Æ\82µ\82Ä\8eg\82í\82ê\82éObject\82Ì\90é\8c¾
+                               proto = new Object();
+                               
+                               //prototype\82ð\8dÄ\8bA\93I\82É\93K\97p
+                               applyPrototypeFunc(func, proto);
+                               
+                               //JavaScript\82Å\82Í\83C\83\93\83X\83^\83\93\83X\82Ìconstructor\83v\83\8d\83p\83e\83B\82Å\90e\83N\83\89\83X\82Ì\92è\8b`\82ð\8eQ\8fÆ\82Å\82«\82Ü\82·
+                               proto.constructor = parent;
+                       }
+
+                       //\8eq\83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X\82ð\8dì\90¬
+                       var tmp = new Function();
+                       tmp.prototype = proto;
+                       var cl = new tmp();
+                       
+                       /*
+                       if(parent.sourceFunc)
+                       {
+                               cl.constructor = parent.sourceFunc;
+                       }else
+                       {
+                               cl.constructor = parent;
+                       }
+                       */
+                       cl.constructor = func;
+                       
+                       // \90e\83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X\95Ï\90\94\82ð\8am\95Û
+                       applyValsFunc(parent, cl, args);
+                       
+                       // \8eq\83N\83\89\83X\82Ì\8c³\82Ì\92è\8b`\82Ì\83C\83\93\83X\83^\83\93\83X\95Ï\90\94\82ð\8am\95Û
+                       child.apply(cl, arguments);
+                       
+                       return cl;
+               };
+               
+               // \8eÀ\8dÛ\82É\95Ô\82³\82ê\82é\8eq\83N\83\89\83X\82Ì\92è\8b`\82É\83v\83\8d\83g\83^\83C\83v\82ð\92Ç\89Á (\8eq\83C\83\93\83X\83^\83\93\83X\82É\94½\89f\82³\82ê\82é)
+               // \92\8d\88Ó! myClass.prototype = { ... }; \82Ý\82½\82¢\82È\82±\82Æ\82ð\82â\82é\82Æ\93r\92[\82É\8fÁ\82¦\82Ä\82µ\82Ü\82¢\82Ü\82·\81B
+               // \82±\82ê\82ç\82ª\8fÁ\82¦\82é\82Æ\90e\83N\83\89\83X\82Ö\82½\82Ç\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82è\82Ü\82·\81B
+               //func.prototype.base = parent;
+               
+               // \8eq\83N\83\89\83X\82Ì\92è\8b`\8e©\91Ì\82É\83v\83\8d\83p\83e\83B\82ð\92Ç\89Á
+               func.base = parent;
+               func.baseArgs = args;
+               func.sourceFunc = child;
+               
+               //protos\82Å\92è\8b`\82³\82ê\82½prototype\82Ì\93K\97p
+               if(protos)
+               {
+                       for(var pr in protos)
+                       {
+                               func.prototype[pr] = protos[pr];
+                       }
+               }
+               
+               return func;
+               
+       }else
+       {
+               throw new TypeError("'extend' can be used only to a instance of 'Function'");
+       }
+};
+
+/*
 // Javascript \82Ì Class \92è\8b` (function)\82É\8cp\8f³\8b@\94\\82ð\95t\89Á\82·\82é
 Function.prototype.extend = function(baseConstructor) {
 
@@ -32,6 +145,7 @@ function applyConstructor(obj, constructor)
        F.prototype = constructor.prototype;
        obj.prototype = new F();
 }
+*/
 
 /*
 
@@ -48,29 +162,28 @@ function applyConstructor(obj, constructor)
 
 //\8eg\82¢\95û
 
-
-var BaseClass = function BaseClass( msg, msg2 )
+var GrandFather = function()
 {
-       //\82±\82±\82Å\93K\93\96\82È\83\81\83\93\83o\82ð\90é\8c¾
-       this.testval = "hello!";
-};
-BaseClass.prototype.method = function()
-{
-       //\82±\82Ì\8aÖ\90\94\82ª\8eq\83N\83\89\83X\8co\97R\82Å\82æ\82Î\82ê\82é\82Æ this \82Í\8eq\83N\83\89\83X\82ð\8ew\82·\81B
+       this.fkjwu = 1;
 };
+GrandFather.prototype.say = function(){console.log("grandfather");};
 
-// \94h\90\83N\83\89\83X\82Ì\92è\8b`
-var SubClass = function SubClass()
+var Father = function(fff)
 {
-       //\89º\82Ì\91æ\93ñ\88ø\90\94\82É\82Í\90e\83N\83\89\83X\82Ì\83R\83\93\83X\83g\83\89\83N\83^\82É\93n\82·\88ø\90\94\82ð\94z\97ñ\82Å\8ew\92è
-       SubClass.base.apply( this , ["ttwilb", "hikarupsp"] );
-       
-       // \82±\82±\82Åthis.\83\81\83\93\83o\96¼ (this.\83\81\83\\83b\83h\96¼)\82Å\90e\83N\83\89\83X\82Ì\83\81\83\93\83o\82É\82à\83A\83N\83Z\83X\82Å\82«\82é
-       
-}.extend( BaseClass ); // BaseClass \82ð\8cp\8f³
-
-var ss = new SubClass();
+       this.father = fff;
+}.extend(GrandFather, [1], {
+       say : function(){console.log("father");}
+});
 
+var  Son = function(a)
+{
+       this.son = "kk" + a;
+}.extend(Father, ["kk"],{
+       say : function(){
+               console.log(this.son);
+               console.log(this.father);
+       }
+});
 
 
 // \97á