<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ~~~ namespace a { interface Person { xx: string; yy: string } function enhancer(target: any) { target.prototype.xx = 'xx'; target.prototype.yy = 'yy'; } @enhancer class Person { constructor() { } } let p = new Person(); console.log(p.xx); console.log(p.yy); } //把類整個替換 namespace b { function enhancer() { return function (target: any) { return class extends Person { constructor(name: string, age: number) { super(name, age); } getAge() { console.log(this.age); } } } } @enhancer() class Person { public name: string = 'person'; public age: number = 10; constructor(name: string, age: number) { this.name = name, this.age = age } } let p = new Person('zhufeng', 10); p.name; } //屬性裝飾器 裝飾屬性 namespace c { //target如果裝飾的是個普通屬性的話,那么這個target指向類的原型 Person.prototype //target裝飾的是一個類的屬性static,那么這個target指定類的定義 function upperCase(target: any, propertyName: string) { let value = target[propertyName]; const getter = () => value; const setter = (newVal: string) => { value = newVal.toUpperCase(); } delete target[propertyName]; Object.defineProperty(target, propertyName, { get: getter, set: setter, enumerable: true, configurable: true }); } function propertyEnumerable(flag: boolean) { return function (target: any, methodName: string) { } } function methodEnumerable(flag: boolean) { return function (target: any, methodName: string, propertyDescriptor: PropertyDescriptor) { propertyDescriptor.enumerable = flag; } } function setAge(age: number) { return function (target: any, methodName: string, propertyDescriptor: PropertyDescriptor) { target.age = age; } } function toNumber(target: any, methodName: string, propertyDescriptor: PropertyDescriptor) { let oldMethod = propertyDescriptor.value; propertyDescriptor.value = function (...args: any[]) { args = args.map(item => parseFloat(item)); return oldMethod.apply(this, args); } } class Person { static age: number; @upperCase @propertyEnumerable(false) name: string = 'zhufeng' @methodEnumerable(true) getName() { console.log('getName'); } @setAge(100) static getAge() { } @toNumber sum(...args: any[]) { return args.reduce((accu, item) => accu + item, 0); } } let p = new Person(); p.name = 'jiagou'; console.log(p.name);//JIAGOU for (let attr in p) { console.log('attr=' + attr); } console.log(Person.age); console.log(p.sum(1, '2', '3')); } namespace d { interface Person { age: number } //Person.prototype login 1 function addAge(target: any, methodName: string, paramsIndex: number) { console.log(target, methodName, paramsIndex); target.age = 10; } //參數裝飾 方法參數 class Person { login(username: string, @addAge password: string) { console.log(this.age, username, password); } } let p = new Person(); p.login('zhufeng', '123'); } namespace e { function Class1Decorator() { return function (target: any) { console.log("類1裝飾器"); } } function Class2Decorator() { return function (target: any) { console.log("類2裝飾器"); } } function MethodDecorator() { return function (target: any, methodName: string, descriptor: PropertyDescriptor) { console.log("方法裝飾器"); } } function Param1Decorator() { return function (target: any, methodName: string, paramIndex: number) { console.log("參數1裝飾器"); } } function Param2Decorator() { return function (target: any, methodName: string, paramIndex: number) { console.log("參數2裝飾器"); } } function PropertyDecorator(name: string) { return function (target: any, propertyName: string) { console.log(name + "屬性裝飾器"); } } @Class1Decorator() @Class2Decorator() class Person { @MethodDecorator() greet(@Param1Decorator() p1: string, @Param2Decorator() p2: string) { } @PropertyDecorator('name') name: string = 'zhufeng'; @PropertyDecorator('age') age: number = 10; } } //屬性方法先執行,誰先寫先執行誰 //方法的時候,先參數再方法,而且 他們一定會在一起 //最后是類 //如果是同類型的,先執行后寫的 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看