得到了:
http.request('js/app/config/config.json').subscribe(data => {
this.url = data.json().url;
});
以某种方式"这"指向订阅者。不知道为什么......因为我认为胖箭lambda会抓住父级的指针。
为什么这样?
答案 0 :(得分:7)
根据屏幕截图:http://d.pr/i/iBa
您正在控制台中调试this
。请注意,控制台上的this
将是实际。当TypeScript为非ES6 JavaScript(它没有箭头函数的原生支持)生成箭头函数时,this
被映射到_this
(和其他东西),这意味着您需要查看{ {1}}。
在学习TypeScript时调试生成的JavaScript。如果您感兴趣,这是TypeScript错误:https://github.com/Microsoft/TypeScript/issues/2859。
答案 1 :(得分:3)
我找到了解决方法,你可以试试这个
http.request('js/app/config/config.json').subscribe((function (data) {
this.url = data.json().url;
}).bind(this));
答案 2 :(得分:2)
箭头函数没有自己的this
值。箭头函数中this
的值始终从封闭范围继承,在您的情况下{{1 }}
在ES6版本中,请注意Subscriber
方法从其来电者处收到subscribe
。内部函数是一个箭头函数,因此它从封闭范围继承 this
。
答案 3 :(得分:1)
这是ES6箭头功能功能,以避免为上下文创建另一个变量。你不能覆盖箭头功能的“这个”。
http.request('js/app/config/config.json').subscribe(function(data) {
this.url = data.json().url;
});
参考此文档: http://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/