OSDN Git Service

Modify the call method on the base.js
[sie/sie.git] / tool / funcproto / base.js
index daa65af..466b9e0 100644 (file)
@@ -157,11 +157,19 @@ var _base = {
         }\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
+            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
-            args[i] = this[i] = obj[i];\r
+            args[i] = this[name] = obj[i];\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
-           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