OSDN Git Service

Modify the call method on the base.js
authordhrname <dhrname@users.sourceforge.jp>
Mon, 8 May 2017 14:29:19 +0000 (23:29 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Mon, 8 May 2017 14:29:19 +0000 (23:29 +0900)
tool/Spec/spec/BaseJSSpec.js
tool/Spec/spec/SvgDomSpec.js
tool/funcproto/base.js

index 283797b..f8064dc 100644 (file)
@@ -344,6 +344,7 @@ describe("base.js", function() {
           f: function() {},\r
           g: [],\r
           h: null,\r
           f: function() {},\r
           g: [],\r
           h: null,\r
+          call: function() {}\r
           \r
         } );\r
         base("$fp").$1.mix( function(_) {\r
           \r
         } );\r
         base("$fp").$1.mix( function(_) {\r
@@ -352,7 +353,10 @@ describe("base.js", function() {
           expect(_.c).toBeTruthy();\r
           expect(_.d).toBeFalsy();\r
           expect(typeof _.e).toBe("object");\r
           expect(_.c).toBeTruthy();\r
           expect(_.d).toBeFalsy();\r
           expect(typeof _.e).toBe("object");\r
-          expect(typeof _.f).toBe("function");\r
+          /*callメソッドのあるオブジェクトや関数が指定された時だけ、未定義値\r
+           * ただし、callメソッドは指定されても未定義とならない*/\r
+          expect(_.f).toBeUndefined();\r
+          expect(typeof _.call).toBe("function");\r
           expect(_.g.length).toEqual(0);\r
           expect(_.h).toBeNull();\r
         } );\r
           expect(_.g.length).toEqual(0);\r
           expect(_.h).toBeNull();\r
         } );\r
@@ -370,7 +374,7 @@ describe("base.js", function() {
       var _ = base("$ffp");\r
       expect(_.a).toEqual(10);\r
       expect(_.b).toEqual(12);\r
       var _ = base("$ffp");\r
       expect(_.a).toEqual(10);\r
       expect(_.b).toEqual(12);\r
-      expect(_.c).toBe(base("$afp"));\r
+      expect(_.c).toBeUndefined();\r
       expect(_.call()).toEqual(22);\r
       /*upメソッドを使えば、再び、ofメソッドを再設定できる*/\r
        _ = base("$ffp").up();\r
       expect(_.call()).toEqual(22);\r
       /*upメソッドを使えば、再び、ofメソッドを再設定できる*/\r
        _ = base("$ffp").up();\r
@@ -439,7 +443,8 @@ describe("base.js", function() {
         expect(_.d).toBeFalsy();\r
         expect(typeof _.e).toBe("object");\r
         /*callメソッドが設定されていないことに注意*/\r
         expect(_.d).toBeFalsy();\r
         expect(typeof _.e).toBe("object");\r
         /*callメソッドが設定されていないことに注意*/\r
-        expect(typeof _.f).toBe("function");\r
+        expect(_.f).toBeUndefined();\r
+        expect(typeof _.call).toBe("function");\r
         expect(_.g.length).toEqual(0);\r
         expect(_.h).toBeNull();\r
       } );\r
         expect(_.g.length).toEqual(0);\r
         expect(_.h).toBeNull();\r
       } );\r
@@ -451,7 +456,7 @@ describe("base.js", function() {
           return this.a;\r
         }\r
       });\r
           return this.a;\r
         }\r
       });\r
-      expect(base("$bfp").a).toEqual(base("$abfp"));\r
+      expect(base("$bfp").a).toBeUndefined();\r
       base("$abfp").of( {\r
         call: function() {\r
           return 12;\r
       base("$abfp").of( {\r
         call: function() {\r
           return 12;\r
index 6a11b4c..8d60316 100644 (file)
@@ -895,17 +895,16 @@ describe("SMIL Animation Spec", function() {
       act.begin = 0;\r
       act.repeatCount = null;\r
       act.repeatDur = null;\r
       act.begin = 0;\r
       act.repeatCount = null;\r
       act.repeatDur = null;\r
-      act.end = act.$begin.$end;\r
-      act.simpleDur = base("$frame").$begin.$activate.simpleDur;\r
+      act.end__ = act.$begin.$end;\r
+      act.simpleDur__ = base("$frame").$begin.$activate.simpleDur__;\r
     } );\r
     /*境界条件を調べておく (limit value analysis)*/\r
     it("should be this for the value  (limit value analysis)", function() {\r
       expect(act.dur).toBe("indefinite");\r
     } );\r
     /*境界条件を調べておく (limit value analysis)*/\r
     it("should be this for the value  (limit value analysis)", function() {\r
       expect(act.dur).toBe("indefinite");\r
-      expect(typeof act.resolvedTime).toBe("function");\r
-      expect(act.end).toBe(act.$begin.$end);\r
+      expect(act.end__).toBe(act.$begin.$end);\r
       expect(act.repeatCount).toBeNull();\r
       expect(act.repeatDur).toBeNull();\r
       expect(act.repeatCount).toBeNull();\r
       expect(act.repeatDur).toBeNull();\r
-      expect(act.simpleDur()).toBeNull();\r
+      expect(act.simpleDur__()).toBeNull();\r
       expect(act.min).toBe("0");\r
       expect(act.max).toBe("indefinite");\r
 \r
       expect(act.min).toBe("0");\r
       expect(act.max).toBe("indefinite");\r
 \r
@@ -915,7 +914,7 @@ describe("SMIL Animation Spec", function() {
     } );\r
     /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
     it("should be this for the value (the valid partion)", function() {\r
     } );\r
     /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
     it("should be this for the value (the valid partion)", function() {\r
-      expect(act.resolvedTime()).not.toBe(0);\r
+      expect(act.resolvedTime__()).not.toBe(0);\r
 \r
       /*Activate Duration = dur*/\r
       act.up("$b");\r
 \r
       /*Activate Duration = dur*/\r
       act.up("$b");\r
@@ -928,96 +927,105 @@ describe("SMIL Animation Spec", function() {
 \r
       act.up("$c");\r
       act.$c.mix( {\r
 \r
       act.up("$c");\r
       act.$c.mix( {\r
-        dur: "10",\r
-        simpleDur: act.simpleDur,
+        dur: "10",
         repeatCount: null,\r
         repeatDur: null\r
       } );\r
         repeatCount: null,\r
         repeatDur: null\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.call()).toBe(act.$c.simpleDur);\r
       act.$c.mix( {\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.call()).toBe(act.$c.simpleDur);\r
       act.$c.mix( {\r
-        dur: "15",\r
-        simpleDur: act.simpleDur,
+        dur: "15",
         repeatCount: null,\r
         repeatDur: null\r
       } );\r
         repeatCount: null,\r
         repeatDur: null\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(15000*act.fpms));\r
 \r
       /*AD = repeatCount*dur*/\r
       act.$c.mix( {\r
         dur: "10",\r
       expect(act.$c.call()).toBe(Math.floor(15000*act.fpms));\r
 \r
       /*AD = repeatCount*dur*/\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 2,\r
         repeatDur: null\r
       } );\r
         repeatCount: 2,\r
         repeatDur: null\r
       } );\r
+      delete act.$c.simpleDur;\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 1,\r
         repeatDur: null\r
       } );\r
         repeatCount: 1,\r
         repeatDur: null\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
 \r
       /*AD = repeatDur*/\r
       act.$c.mix( {\r
         dur: "indefinite",\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
 \r
       /*AD = repeatDur*/\r
       act.$c.mix( {\r
         dur: "indefinite",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
+      delete act.$c.simpleDur;\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBeNull();\r
       act.$c.mix( {\r
         dur: "indefinite",\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBeNull();\r
       act.$c.mix( {\r
         dur: "indefinite",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 2,\r
         repeatDur: "10"\r
       } );\r
         repeatCount: 2,\r
         repeatDur: "10"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBeNull();\r
       act.$c.mix( {\r
         dur: "10",\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBeNull();\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: null,\r
         repeatDur: "15"\r
       } );\r
         repeatCount: null,\r
         repeatDur: "15"\r
       } );\r
+      delete act.$c.simpleDur;\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: null,\r
         repeatDur: "11"\r
       } );\r
         repeatCount: null,\r
         repeatDur: "11"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(11000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       \r
       /*AD = Min(repeatCount*d, repeatDur)*/\r
       act.$c.mix( {\r
         dur: "10",\r
       expect(act.$c.call()).toBe(Math.floor(11000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       \r
       /*AD = Min(repeatCount*d, repeatDur)*/\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
+      delete act.$c.simpleDur;\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
       act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 1,\r
         repeatDur: "15"\r
       } );\r
         repeatCount: 1,\r
         repeatDur: "15"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "11",\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "11",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 1,\r
         repeatDur: "9"\r
       } );\r
         repeatCount: 1,\r
         repeatDur: "9"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(9000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(11000*act.fpms));\r
 \r
       expect(act.$c.call()).toBe(Math.floor(9000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(11000*act.fpms));\r
 \r
@@ -1025,47 +1033,53 @@ describe("SMIL Animation Spec", function() {
       act.$c.mix( {\r
         end: null,\r
         dur: "10",\r
       act.$c.mix( {\r
         end: null,\r
         dur: "10",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: null,\r
         repeatDur: "15"\r
       } );\r
         repeatCount: null,\r
         repeatDur: "15"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(15000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "indefinite",\r
       expect(act.$c.call()).toBe(Math.floor(15000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "indefinite",\r
-        simpleDur: act.simpleDur,
+        simpleDur__: act.simpleDur__,
         repeatCount: 2,\r
         repeatDur: "10"\r
       } );\r
         repeatCount: 2,\r
         repeatDur: "10"\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBeNull();\r
 \r
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBeNull();\r
 \r
-      act.end.string = null;\r
+      act.end__.string = null;\r
       act.up("$cd").mix( {\r
         dur: "10",\r
         end: act.end,\r
         repeatCount: 2\r
       } );\r
       act.up("$cd").mix( {\r
         dur: "10",\r
         end: act.end,\r
         repeatCount: 2\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$cd.call()).toBe(Math.floor(10000*act.fpms) * 2);\r
       \r
       expect(act.$cd.call()).toBe(Math.floor(10000*act.fpms) * 2);\r
       \r
-      act.$cd.end = act.end;\r
+      act.$cd.end__ = act.end__;\r
       act.$cd.repeatCount = null;\r
       act.$cd.repeatDur = "12";\r
       act.$cd.repeatCount = null;\r
       act.$cd.repeatDur = "12";\r
+      delete act.$c.end;\r
       expect(act.$cd.call()).toBe(Math.floor(12000*act.fpms));\r
       \r
       act.up("$d").mix( {\r
         min: "2",\r
         max: "3",\r
         dur: "1",\r
       expect(act.$cd.call()).toBe(Math.floor(12000*act.fpms));\r
       \r
       act.up("$d").mix( {\r
         min: "2",\r
         max: "3",\r
         dur: "1",\r
-        simpleDur: act.simpleDur\r
+        simpleDur__: act.simpleDur__\r
       } );\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$d.call()).toBe(Math.floor(2000*act.fpms));\r
       act.up("$d").mix( {\r
         min: "1",\r
         max: "2",\r
         dur: "12",\r
       expect(act.$d.call()).toBe(Math.floor(2000*act.fpms));\r
       act.up("$d").mix( {\r
         min: "1",\r
         max: "2",\r
         dur: "12",\r
-        simpleDur: act.simpleDur\r
+        simpleDur__: act.simpleDur__\r
       } );\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$d.call()).toBe(Math.floor(2000*act.fpms));\r
       \r
       /*endで0が指定されている場合*/\r
       expect(act.$d.call()).toBe(Math.floor(2000*act.fpms));\r
       \r
       /*endで0が指定されている場合*/\r
@@ -1091,8 +1105,9 @@ describe("SMIL Animation Spec", function() {
         min: "3",\r
         max: "2",\r
         dur: "1",\r
         min: "3",\r
         max: "2",\r
         dur: "1",\r
-        simpleDur: act.simpleDur\r
+        simpleDur__: act.simpleDur__\r
       } );\r
       } );\r
+      delete act.$c.simpleDur;\r
       expect(act.$d.call()).toBe(Math.floor(1000*act.fpms));\r
       \r
       act.repeatDur = null;\r
       expect(act.$d.call()).toBe(Math.floor(1000*act.fpms));\r
       \r
       act.repeatDur = null;\r
index daa65af..466b9e0 100644 (file)
@@ -157,11 +157,19 @@ var _base = {
         }\r
         /*__appと__argsプロパティに、指定されたプロパティを記録しておく*/\r
         var args = this.__args || [];\r
         }\r
         /*__appと__argsプロパティに、指定されたプロパティを記録しておく*/\r
         var args = this.__args || [];\r
+        var name;\r
         for (var i in obj) {\r
           if(obj.hasOwnProperty(i) && (i !== "call")) {\r
         for (var i in obj) {\r
           if(obj.hasOwnProperty(i) && (i !== "call")) {\r
+            if (obj[i] && obj[i].call) {\r
+              /*callメソッドを持っている場合は、obj.methodではなく、\r
+               * obj.method__に登録させる*/\r
+               name = i+ "__";\r
+            } else {\r
+              name = i;\r
+            }\r
             /*一度登録されたプロパティは二度書きしないようにする*/\r
             args[i] || args.push(i);\r
             /*一度登録されたプロパティは二度書きしないようにする*/\r
             args[i] || args.push(i);\r
-            args[i] = this[i] = obj[i];\r
+            args[i] = this[name] = obj[i];\r
           }\r
         }\r
         obj.call && (this.__app = { call: obj.call });\r
           }\r
         }\r
         obj.call && (this.__app = { call: obj.call });\r
@@ -184,11 +192,14 @@ var _base = {
          /*循環参照を避けるためcallメソッドの入れ替え*/\r
          this.call = this.callFunc;\r
          for (var i=0, ali=args.length;i<ali;++i) {\r
          /*循環参照を避けるためcallメソッドの入れ替え*/\r
          this.call = this.callFunc;\r
          for (var i=0, ali=args.length;i<ali;++i) {\r
-           /*callメソッドがあるオブジェクトは展開*/\r
-           var ai = args[i],\r
-               argi = this[ai];\r
-           if (argi && argi.call) {\r
-             this[ai] = argi.call(this);\r
+           /*callメソッドがあるオブジェクトは展開\r
+            * ただし、二度は展開しない*/\r
+           var ai = args[i];\r
+           if (!this.hasOwnProperty(ai)) {\r
+             var argi = this[ai+ "__"];\r
+             if (argi && argi.call) {\r
+               this[ai] = argi.call(this);\r
+             }\r
            }\r
          }\r
          this.call = call;\r
            }\r
          }\r
          this.call = call;\r