ES6學習之裝飾器


定義:修飾器是一個對類進行處理的函數,用來修改類的行為

<注>:裝飾器只能用來修改類及類的方法

類的裝飾:

  • 靜態屬性:只能通過類訪問,修飾函數直接在類上操作
@testable
class MyTestableClass {
  // ...
}

function testable(target) {
  target.isTestable = true;
}

MyTestableClass.isTestable // true

            <注>1)testable函數的參數targetMyTestableClass類本身。

       2)修飾器也可以接受參數:這就等於可以修改修飾器的行為

function testable(isTestable) {
  return function(target) {
    target.isTestable = isTestable;
  }
}

@testable(true)
class MyTestableClass {}
MyTestableClass.isTestable // true

@testable(false)
class MyClass {}
MyClass.isTestable // false
  • 實例屬性:可以在實例中訪問,對類的prototype對象進行操作
function testable(target) {
  target.prototype.isTestable = true;
}

@testable
class MyTestableClass {}

let obj = new MyTestableClass();
obj.isTestable // true

類方法的修飾

class Person {
  @readonly
  name() { return `${this.first} ${this.last}` }
}

function readonly(target, name, descriptor){
  // descriptor對象原來的值如下
  // {
  //   value: specifiedFunction,
  //   enumerable: false,
  //   configurable: true,
  //   writable: true
  // };
  descriptor.writable = false;
  return descriptor;
}

<注>:修飾器第一個參數是類的原型對象,第二個參數是所要修飾的屬性名,第三個參數是該屬性的描述對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM