如此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)
答案 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);
}
}
}