}\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
/*循環参照を避けるため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