3

演示相关行为的示例代码:

export class NodePool {
    private tail: Node;
    private nodeClass: Function;
    private cacheTail: Node;

    constructor(nodeClass: Function) {
        this.nodeClass = nodeClass;
    }

    get(): Node {
        if (this.tail) {
            var node = this.tail;
            this.tail = this.tail.previous;
            node.previous = null;
            return node;
        } else {
            return new this.nodeClass();
        }
    }
}

示例的第 17 行(返回新......)导致编译器抱怨:
“函数”类型的值不是新的。

将任意类的构造函数存储在变量中以便我以后实例化它的正确方法是什么。

4

1 回答 1

7

您可以使用类型文字来指定可以新建的对象。这也具有增加类型安全性的优点:

export class NodePool {
    private tail: Node;
    private cacheTail: Node;

    constructor(private nodeClass: { new(): Node; }) {
    }

    get(): Node {
        if (this.tail) {
            var node = this.tail;
            this.tail = this.tail.previous;
            node.previous = null;
            return node;
        } else {
            return new this.nodeClass();
        }
    }
}

class MyNode implements Node {
    next: MyNode;
    previous: MyNode;
}

class NotANode {
    count: number;  
}

var p1 = new NodePool(MyNode);   // OK
var p2 = new NodePool(NotANode); // Not OK
于 2012-11-27T22:59:59.047 回答