我正在练习angularjs2,我注意到这句话,但无法理解这意味着什么。
@Component({
selector: 'hero-form',
templateUrl: 'app/hero-form.component.html'
})
export class HeroFormComponent {
model = new Hero(18, 'Dr IQ', this.powers[0], 'Chuck Overstreet');
active = true;
newHero() {
this.model = new Hero(42, '', '');
this.active = false;
setTimeOut(()=> this.active=true, 0)*
}
}
我知道在JavaScript中有一个函数名setTimeOut
,但无法理解()
和箭头=>
......
提前致谢!
答案 0 :(得分:12)
这是新的JavaScript arrow function表示法。您引用的行几乎等同于传统函数表示法中的这段代码:
setTimeout(function() {
this.active = true;
}, 0);
然而,在传统的表示法中,this
将绑定到全局对象(在严格模式之外 - 在严格模式下,您将得到ReferenceError
),因为它在执行时的绑定方式上下文有效。引入箭头函数之前的传统解决方法是:
var self = this;
setTimeout(function() {
self.active = true;
}, 0)
箭头函数通过词法绑定this
解决此问题,就像任何其他变量一样,而不是定义自己的变量。除了this
的处理方式之外,箭头函数也不会隐式定义自己的arguments
或super
变量,而是以词法方式绑定它们。
深入挖掘,newHero()
做了什么?它是一个构造函数。调用它时,会分配一个新对象,并且可以通过变量this
在函数体内引用它。构造函数在this
对象上设置两个属性;这些属性为.model
和.active
,具有特定值。
表达式(() => this.active = true)
创建一个函数对象。它描述了以后应该执行的内容。当函数对象被称为时,正文被执行。因此,代码行创建了函数对象并将其提供给setTimeout()
,它将在给定的时间长度之后调用函数对象 - 在本例中为0毫秒。