你这里的写法本来就是 es6里的arrow function要解决的一个问题(保证arrow function里的this是当前作用域的this), ts这么做也是它在语义上和es6的行为做持一致
【 在 facilitator (黄书中自有颜如玉 脸书中自有黄金屋) 的大作中提到: 】
ts确实存在某些情况下this变成了window对象的情况
export class test{
onClick(){
this.calculate1();
this.calculate2();
}
calculate1(){
console.log(this); //在angular1当中 时而发生this变成window的状况
}
calculate2 = () =>{ //如果写成属性赋值的形式 this就永远指代类型本身
console.log(this);
}
}
另外一种情形就是写系统类型的prototype扩展函数时取不到this 其实只要写个继承类型就可以绕开
interface String{
firstChar():string;
}
class StringExtension extends String{
firstChar(){
return this.substr(0,1);
}
}
String.prototype.firstChar = StringExtension.prototype.firstChar;
其他的this问题就是js的特性问题 js在传递函数时不会传递上下文
C#或者其他语言里很习惯地把“函数指针”传递给别的对象 但是在js里必须同时传递携带函数的对象和函数 否则函数就不会在被传递的对象自身上调用而出错 这种特性对于从别的语言半路出家转行的人来说 是要跳很多坑才能深刻领悟的
【 在 cnxs 的大作中提到: 】
: 因为js里面数值只有float一种存储方式,并没有什么int种类,ts完全兼容并继承js,所以ts的数值也只有number一种,这并没有什么不对啊
: es6后面还有es7,ts永远只有一种并且代表了最新的js发展方向,看看angular用 ts就知道了
: 你说ts里写jquery不能取得this是什么意思?ts里你可以直接写原生js完全没有任何问题的
: ...................
--
修改:pangwa FROM 116.238.69.*
FROM 116.238.69.*