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

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.

主站蜘蛛池模板: 宜春市| 三原县| 湘乡市| 吴堡县| 社旗县| 丹凤县| 辉南县| 洞头县| 阿瓦提县| 四会市| 潜江市| 名山县| 喀什市| 攀枝花市| 长治县| 拜泉县| 德清县| 福州市| 运城市| 沙河市| 威宁| 洞口县| 兴国县| 邢台县| 盱眙县| 丹棱县| 宁河县| 儋州市| 邵东县| 万源市| 太谷县| 桂东县| 名山县| 铜川市| 上饶市| 廉江市| 自治县| 来安县| 无棣县| 大冶市| 寿阳县|