2

例如,当我在类中创建一个函数时,TS 编译器将该函数作为原型函数。

class MyClass {
    getExample()
    {

    }
}

结果是

var MyClass = (function() {
    function MyClass() {}
    MyClass.prototype.getExample = function() {};
    return MyClass;
})();​

但我需要的是

function MyClass() {

    this.getExample = function() {

    }
}​

是否有可能获得这样的功能?

4

4 回答 4

3

看看这个JQFAQ.com链接,这里是您的问题“如何在类中创建一个不属于 TypeScript 中的原型函数的函数?”的答案,还有更多常见问题解答。

于 2013-01-02T07:17:26.410 回答
2

我看过 TypeScript(就像在线游乐场......虽然:P)
据我所知,你想做的事情很容易完成,我自己尝试了一些事情这对我来说就像一个魅力:

class Greeter {
    greeting: string;
    closureMethod;
    constructor (message: string) {
        this.greeting = message;
        var that = this;
        var closureMethod = function()
        {
            console.log(that.greeting);
        };
        this.closureMethod = closureMethod;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   
var greeter = new Greeter("world");
var another = new Greeter('Foobar');
var button = document.createElement('button');
button.innerText = "Say Hello";
button.onclick = function()
{
    greeter.closureMethod();
    another.closureMethod();
}
document.body.appendChild(button)

哪个有效,但更短(这也有效)

class Greeter {
    greeting: string;
    closureMethod;//define property here, no type
    constructor (message: string) {
        this.greeting = message;
        var that = this;
        this.closureMethod = function()
        {
            console.log(that.greeting);
        };
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   

两者都产生相同的结果:为每个新实例一遍又一遍地定义方法的构造函数(老实说,这不是一个好主意)。
如您所见,它使用that, 而不是访问实例this,这是一遍又一遍地创建相同方法的唯一好处……只要您有充分的理由这样做。但我不会对此大发雷霆。
上面的代码有效,它生成了一个你想要的构造函数。

于 2012-12-28T16:12:29.497 回答
1

您在 TypeScript 中添加到构造函数的方法将作为实例方法添加。

您在构造函数之外和类内添加的方法将被添加到对象的原型中。如果您要“更新”类的多个实例,这是首选方法,因为它可以节省内存。但是当你这样做时,你需要确保你可以访问你需要的实例 memebrs 和正确的“this”,你可以通过提前设置它们来做到这一点。

我建议先考虑原型,然后如果你真的需要它们作为方法,再回到实例。如果它是一个单例对象,那么它真的没关系。

但是......当您在 TypeScript 中创建类时,私有和公共的概念不会转换为发出的 JavaScript。因此,当您在 JavaScript 中公开每个实例成员时,请记住这一点。我更喜欢使用像 JavaScript 中的模块模式这样的模式,它隐藏了内部变量/方法,只公开了我想要访问的内容。您可以使用 TypeScript 通过创建一个返回对象的可访问成员(无类)的函数来实现这一点。只是想我会提到替代方案。

于 2012-12-28T17:07:17.933 回答
0

你可以这样做:

class MyClass {
    static getSomething() {

    }
}

static 关键字意味着它不是原型方法,您不需要在实例上调用它 - 只需使用以下命令调用它:

MyClass.getSomething();

当然,这可能不是您想要的——但您需要分享您需要它的原因以使其更清晰。

于 2012-12-29T11:52:24.027 回答