官术网_书友最值得收藏!

Property decorators

Property decorators are prefixed to property declarations. They actually redefine the property decorated by adding extra behavior. The signature of PropertyDecorator in the TypeScript source code is as follows:

declare type PropertyDecorator = (target: Object, propertyKey: string | 
symbol) => void;

The following is a code snippet of a class with a property decorator applied to a property:

class Customer { 
  @hashify 
  public firstname: string; 
  public lastname: string; 
  
  constructor(firstname : string, lastname : string) { 
    this.firstname = firstname; 
    this.lastname = lastname; 
  } 
} 

In this code, the firstname property is decorated with the @hashify property decorator. Now, we will see the code snippet of the @hashify property decorator function:

function hashify(target: any, key: string) { 
  var _value = this[key]; 
  
  var getter = function () { 
        return '#' + _value; 
  }; 
  
  var setter = function (newValue) { 
    _value = newValue; 
  }; 
  
  if (delete this[key]) { 
    Object.defineProperty(target, key, { 
      get: getter, 
      set: setter, 
      enumerable: true, 
      configurable: true 
    }); 
  } 
} 

The _value holds the value of the property that is being decorated. Both getter and setter functions will have access to the variable _value and here we can manipulate the _value by adding extra behaviors. I have concatenated # in the getter to return a hash-tagged firstname. Then we delete the original property from the class prototype using the delete operator. A new property will be created with the original property name with the extra behavior.

主站蜘蛛池模板: 察哈| 彰武县| 九龙坡区| 什邡市| 凤山县| 利川市| 绥化市| 健康| 雷州市| 武安市| 道真| 武平县| 宜良县| 武城县| 瑞丽市| 报价| 高青县| 泽普县| 郴州市| 白朗县| 津南区| 陆川县| 兴城市| 武宁县| 日喀则市| 乐都县| 密山市| 肥城市| 建始县| 五指山市| 镇远县| 天柱县| 水城县| 开封市| 昆山市| 宜兴市| 铁岭市| 南宫市| 大方县| 蕉岭县| 桐庐县|