• 目录
  • 简介
  • 收藏

    烂尾楼

    莫导喜欢听人叫他爸爸…… 要是让莫导的广大粉丝知衣冠禽兽的莫导居然有这个癖好……   你以为会发生 粉转黑、路转喷这样的事情吗?   不,他们会说我们愿意。   爸爸爹爹皇阿玛,换着花样叫都行!   床上床下叫都没关系!

    乱码

    小说: 烂尾楼 作者:衣衫似风雪 字数:1070 更新时间:2024-03-29 17:58:10

    function testable(isTestable) {

    return function(target) {

    target.isTestable=isTestable;

    }

    }

    @testable(true)

    class Example {}

    Example.isTestable; // true

    实例属性

    上面两个例子添加的是静态属性,若要添加实例属性,在类的 prototype 上操作即可。

    方法修饰

    3个参数:target(类的原型对象)、name(修饰的属性名)、descriptor(该属性的描述对象)。

    class Example {

    @writable

    sum(a, b) {

    return a + b;

    }

    }

    function writable(target, name, descriptor) {

    descriptor.writable = false;

    return descriptor; // 必须返回

    }

    修饰器执行顺序

    由外向内进入,由内向外执行。

    class Example {

    @logMethod(1)

    @logMethod(2)

    sum(a, b){

    return a + b;

    }

    }

    function logMethod(id) {

    console.log('evaluated logMethod'+id);

    return (target, name, desctiptor) => console.log('excuted logMethod '+id);

    }

    // evaluated logMethod 1

    // evaluated logMethod 2

    // excuted logMethod 2

    // excuted logMethod 1

    封装与继承

    getter / setter

    定义

    class Example{

    constructor(a, b) {

    this.a = a; // 实例化时调用 set 方法

    this.b = b;

    }

    get a(){

    console.log('getter');

    return this.a;

    }

    set a(a){

    console.log('setter');

    this.a = a; // 自身递归调用

    }

    }

    let exam = new Example(1,2); // 不断输出 setter ,最终导致 RangeError

    class Example1{

    constructor(a, b) {

    this.a = a;

    this.b = b;

    }

    get a(){

    console.log('getter');

    return this._a;

    }

    set a(a){

    console.log('setter');

    this._a = a;

    }

    }

    let exam1 = new Example1(1,2); // 只输出 setter , 不会调用 getter 方法

    console.log(exam1._a); // 1, 可以直接访问

    getter 不可单独出现

    Email
    lovenovelapp@gmail.com
    Facebook主页
    @Lovenovel
    Twitter
    @lovenovelapp