OSDN Git Service

Version 0.6.179, fix X.Audio & X.AudioSprite.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 04_XObject.js
index 9ee8197..329973d 100644 (file)
@@ -7,12 +7,12 @@
  * @param {object} obj \r
  * @return {boolean} name が定義されている(値が undefined や null でも) -> true\r
  */\r
-var X_Object_inObject = X_UA[ 'IE' ] < 5.5 ? // TODO JScript で判定\r
-       (function( name, obj, p ){\r
-               if( obj[ name ] ) return true; // quick\r
+var X_Object_inObject = !X_Script_gte15 ? // TODO JScript で判定\r
+       (function( name, obj, _ ){\r
                name += ''; // 数値も許可\r
-               for( p in obj ){\r
-                       if( p === name ) return true;\r
+               if( obj[ name ] ) return true; // quick\r
+               for( _ in obj ){\r
+                       if( _ === name ) return true;\r
                };\r
                return false;\r
        }) :\r
@@ -170,3 +170,86 @@ function X_Object_find( obj, selector ){
        return obj;\r
 };\r
 \r
+// TODO X.Object.own( obj, name )\r
+/*\r
+ * Safari の JavaScript の不備 \r
+ * http://nanto.asablo.jp/blog/2006/01/13/209495\r
+ * \r
+ * web.paulownia.jp - JavaScriptとクロージャ\r
+ * https://web.archive.org/web/20070526063400/http://web.paulownia.jp/script/oop/closure.html\r
+ * MacOSX 10.3のsafariにはhasOwnPropertyが実装されていないので、独自に追加する必要があります。\r
+ * \r
+ * prototype汚染問題でhasOwnPropertyを使わないクロスブラウザな方法\r
+ * http://os0x.hatenablog.com/entry/20080901/1220272509\r
+ */\r
+/*\r
+Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
+               var proto = this.constructor && this.constructor.prototype,\r
+                       __p__ = proto && proto.__proto__,\r
+                       v     = this[ p ],\r
+                       r     = false;\r
+               \r
+               if( __p__ ) proto.__proto__ = null;\r
+               \r
+               if( p in this ){\r
+                       if( v !== v ){\r
+                               if( proto && ( p in proto ) && proto[ p ] !== proto[ p ] ){ // proto[ p ] is NaN\r
+                                       proto[ p ] = 0; // different value\r
+                                       r = this[ p ] !== this[ p ]; // isNaN?\r
+                                       proto[ p ] = v; // set NaN\r
+                               } else {\r
+                                       r = true;\r
+                               };\r
+                       } else\r
+                       if( proto && p in proto && proto[ p ] === v ){\r
+                               // this と proto に同名で同値が書かれている可能性あり\r
+                               proto[ p ] = v + ' '; // different value\r
+                               r = v === this[ p ];\r
+                               proto[ p ] = v;\r
+                       } else {\r
+                               r = true;\r
+                       };\r
+               };\r
+               \r
+               if( __p__ ) proto.__proto__ = __p__;\r
+               \r
+               return r;\r
+  }); */\r
+/*\r
+Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
+               var proto = this.constructor && this.constructor.prototype,\r
+                       __p__ = proto && proto.__proto__,\r
+                       r     = false,//!!( __p__ && ( proto.__proto__ = null ) )\r
+                       _pro_, v, isNaN;\r
+               \r
+               if( __p__ ) proto.__proto__ = null;\r
+               if( this.__proto__ ){\r
+                       _pro_ = this.__proto__;\r
+                       this.__proto__ = null;\r
+               };\r
+               \r
+               if( p === '__proto__' ){\r
+                       r = !!_pro_;\r
+               } else {\r
+                       v     = this[ p ];\r
+                       isNaN = v !== v;                \r
+                       \r
+                       if( p in this ){\r
+                               if( proto && p in proto && ( proto[ p ] === v ) ^ isNaN ){ //true + false, false + true\r
+                                       // this と proto に同名で同値が書かれている可能性あり\r
+                                       proto[ p ] = v + ' '; // different value\r
+                                       r = ( v === this[ p ] ) ^ isNaN; // true + false, false + true\r
+                                       proto[ p ] = v;\r
+                               } else {\r
+                                       r = true;\r
+                               };\r
+                       };                      \r
+               };\r
+\r
+               if( __p__ ) proto.__proto__ = __p__;\r
+               if( _p_ ) this.__proto__ = _pro_;\r
+               return r;\r
+  }); */\r
\r
\r
+\r