TypeScript:Lambdas 和使用 'this'
TypeScript: Lambdas and using 'this'
JavaScript 框架经常使用 apply() 调用回调。
然而,TypeScript 的箭头符号似乎不允许我访问 'this' 指针。
怎么做的?
如果不是,是否有地方可以对 Lambda 上的当前 'this' 处理方式投反对票?
TypeScript 在箭头函数中对 this
的处理符合 ES6(阅读:Arrow Functions)。由于该规范,它以任何其他方式行事都是不一致的。
如果要访问this
当前函数,那么可以使用常规函数。
例如,更改:
function myScope() {
var f = () => console.log(this); // |this| is the instance of myScope
f.call({});
}
new myScope();
收件人:
function myScope() {
var f = function() { console.log(this); } // |this| is {}
f.call({});
}
new myScope();
让 Lambda 函数使用关键字 this 的一种方法是将它放在 class.
中
在下面的例子中,函数 employee2 将不会编译:
// Using a method defined as a lambda function
class Company{
private id : number
private name : string;
public employee = (id : number, name : string) => {
this.id = id;
this.name = name;
}
}
// Using a function declaration
function employee1(id : number, name : string){
this.id = id;
this.name = name;
}
// Using a lambda function
const employee2 = (id : number, name : string) => {
this.id = id;
this.name = name;
}
// Using a function expression
const employee3 = function(id : number, name : string){
this.id = id;
this.name = name;
}
JavaScript 框架经常使用 apply() 调用回调。
然而,TypeScript 的箭头符号似乎不允许我访问 'this' 指针。
怎么做的?
如果不是,是否有地方可以对 Lambda 上的当前 'this' 处理方式投反对票?
TypeScript 在箭头函数中对 this
的处理符合 ES6(阅读:Arrow Functions)。由于该规范,它以任何其他方式行事都是不一致的。
如果要访问this
当前函数,那么可以使用常规函数。
例如,更改:
function myScope() {
var f = () => console.log(this); // |this| is the instance of myScope
f.call({});
}
new myScope();
收件人:
function myScope() {
var f = function() { console.log(this); } // |this| is {}
f.call({});
}
new myScope();
让 Lambda 函数使用关键字 this 的一种方法是将它放在 class.
中在下面的例子中,函数 employee2 将不会编译:
// Using a method defined as a lambda function
class Company{
private id : number
private name : string;
public employee = (id : number, name : string) => {
this.id = id;
this.name = name;
}
}
// Using a function declaration
function employee1(id : number, name : string){
this.id = id;
this.name = name;
}
// Using a lambda function
const employee2 = (id : number, name : string) => {
this.id = id;
this.name = name;
}
// Using a function expression
const employee3 = function(id : number, name : string){
this.id = id;
this.name = name;
}