jsのdefineProperty方法

2950 ワード

function defineGetter(obj, name, getter) {
  Object.defineProperty(obj, name, {
    configurable: true,
    enumerable: true,
    get: getter
  });
};
expressにおいてdefinePropertyの使用が見られ、S 5はObject.defineProperty()によってオブジェクト自体のあるpropertyの属性を設定することができる.
Object.defineProperty(object, propertyname, descriptor)
#object,      
#propertyname,   
#descriptor,   
#descriptor        
/**
 * @{param} descriptor
 */
{
    configurable: false, //        ,          writable 、 enumerable 、 configurable   。
    enumerable: false,   //      ,      for...in    ,       Object.keys()         
    writable: false,     //             
    value: null,     //      
    set: undefined,     //      ,        
    get: undefined      //      ,        
}

var req = {
  protocol:"https"
};
Object.defineProperty(req, "secure",{
  configurable: true,
  enumerable: true,
  get: function(){return this.protocol === 'https';}
});
しかし、もう一つの注意が必要です.Object.defineProperty()方法で属性を設定した場合、アクセス属性set getとWritableまたはvalue属性は同時に宣言できません.つまり、ある属性にwritableまたはvalue属性が設定されていると、この属性はgetとsetを宣言できなくなり、逆もまた然りであるということです.Object.defineProperty()は、一つの属性を宣言するとき、同じ属性に二つ以上のアクセス制御が発生することが許されないからです.
#        
#Object.getOwnPropertyDescriptor(object, propertyname);
var descriptor = Object.getOwnPropertyDescriptor(req, "secure");
{ get: [Function],
  set: undefined,
  enumerable: true,
  configurable: true }