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
}
});
*/