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