typescript箭头操作符在原型上定义函数

时间:2014-03-11 01:58:26

标签: javascript typescript arrow-functions

如此example所示,a的分配和b的定义导致不同的功能类型。

export module A {
    export class Test {
        constructor(){}               
            a =(x) => { return Math.sin(x); }
            b (x) : any { return Math.sin(x); }
    }
}

这导致以下js

var Test = (function () {
            function Test() {
                this.a = function (x) {
                    return Math.sin(x);
                };
            }
            Test.prototype.b = function (x) {
                return Math.sin(x);
            };
            return Test;
        })();

但是,我对规范 4.9.2箭头函数表达式

感到困惑
Thus, the following examples are all equivalent:
       (x) => { return Math.sin(x); }
       (x) => Math.sin(x)
       x => { return Math.sin(x); }
       x => Math.sin(x)

那么,有没有办法使用箭头操作符并在原型上定义一个函数。 像,

 c(x) => Math.sin(x)

2 个答案:

答案 0 :(得分:0)

arrow functions的有效语法与“成员位置”不同。将函数放在原型上的“唯一”方法是通过成员函数。箭头函数实际上是成员属性(恰好是函数)。您的代码等同于以下内容:

export module A {
    export class Test {
        constructor(){}               
        a = function (x){ return Math.sin(x); }
        b (x) : any { return Math.sin(x); }
    }
}

会员资产继续this而不是prototype

您可以做的是将其定义为成员函数,然后在构造函数中覆盖它:

export module A {
    export class Test {
        constructor(){
            this.a =  (x)=> Math.sin(x);
        }               
        a (x){ }
        b (x) : any { return Math.sin(x); }
    }   
}

如果你愿意,甚至可以把它放在原型上:

class Base {
    constructor(){
        Base.prototype.a =  (x)=> Math.sin(x);
    }               
    a (x){}
} 

class Child extends Base{
    constructor(){
        super();
    }

    a(x){return super.a(x);}
}

var child = new Child();
console.log(child.a(Math.PI));

答案 1 :(得分:0)

使用标准功能有什么问题?即

export module A {
    export class Test {
        constructor(){}               
            a =(x) => { return Math.sin(x); }
            b (x) : any { return Math.sin(x); }
        c(x:number): number {
          return Math.sin(x);
        }
    }
}