JavaScriptの継承、検出属性、属性特性、列挙属性

2481 ワード

//  

/*
              ;

JavaScript    “    ”,                  。
       O   X,   O    x,                X,          x,           ,                 ,    x         NULL     ,            “ ”,    “ ”         。

       o   x  ,  o      x(          ),                  x  ,  o      x,       o        x,    o      x,                      。
*/

var unitcircle = { r : 1};
var c = inherit(unitcircle);
c.x = 1; c.y = 1; //c      
c.r = 2;       // c        

unitcircle.r; // => 1,         

/*
                      x  ,         undefined。                            
*/

/*
    
            
1.  in   
2.  hasOwnPerperty()                 false
3.  propertyIsEnumerable():                     true     true,            ,   JavaScript               。

*/

var o = { x: 1};

"x" in o.x; //true
"y" in o.x; //false
"toString" in o.x //true o  toString   


o.hasOwnProperty("x"); //true
o.hasOwnProperty("y"); //false
o.hasOwnProperty("toString") //false:toString       

o.propertyisEnumerable("x");  //true
o.propertyisEnumerable("y");  //false
Object.prototype.propertyIsEnumerable("toString");  //false

//    in     ,            “!==”         undefined

o.x !== undefined; //true
o.y !== undefined;  //false
o.toString !== undefined; //true



/*
    :
for/in                    (         ),           。            ,                   

*/


/*

    
         : (value)、   (writable)、    (enumerable)、    (configurable).
          : (get) 、   (set)、         

              ,ECMAScript5         "     "
       :value writrable enumerable configurable

    Object.getOwnPropertyDescription()(            )                  :

//   {value: 1, writrable:true, enumerable:true, configuration:true}
Object.getOwnPropertyDescrition({x:1}, "x");

             :  undefined

         ,              ,     Object.definProperty(),        、                     ;

Object.definProperty(o, "x", {x:1, writable: true, enumerable: false, configurable: true});

              ,     Object.defineproperties(),            ,           ,               ,          , :

var p = Object.defineProperties({},{
	x: {x:1, writable: true, enumerable: false, configurable: true},
	y: {x:1, writable: true, enumerable: false, configurable: true},
	r: {
			get: function() {return Math.sqrt(this.x*this.x + this.y*this.y) },
			enumerable: true,
			configrable: true
		}
});



*/