我是ES6的新手,我需要将一段代码从ES5转换为ES6。
我已经开始研究它了,但是我对如何转换某些部分如.apply ...感到困惑。
这是我想转换的代码:
export default class AdobeHeartbeatAdapter {
constructor(MediaHeartbeat, delegate, config) {
this._queuedAPICalls = [];
this._tracker = null;
this._creatingTracker = true;
this._internalError = false;
const self = this;
MediaHeartbeat.getInstance(delegate, config)
.then(tracker => {
setTimeout(() => {
self._creatingTracker = false;
self._tracker = tracker;
self._queuedAPICalls.forEach(apiCall => {
self[apiCall].apply(self._tracker, apiCall.arguments2);
});
}, 5000);
})
.catch(error => {
console.log(error);
this._internalError = true;
});
const apis = [
'trackSessionStart',
'trackSessionEnd',
'trackComplete',
'trackPlay',
'trackPause',
'trackEvent',
'trackError',
];
apis.forEach(api => {
AdobeHeartbeatAdapter.prototype[api] = function() {
if (this._internalError) {
console.log('Error creating MediaHeartbeat instance. API call is dropped.');
return;
}
if (this._creatingTracker) {
console.log('Creating MediaHeartbeat instance. Queuing current API call.');
this._queuedAPICalls.push({
name: api,
arguments2: arguments,
});
return;
}
this._tracker[api].apply(this._tracker, arguments);
};
});
}
}
[如果有人可以帮助我。
非常感谢。
实际上,通过设置setTimeOut并因此将事件添加到队列,我有一个错误。
错误:self[apiCall].apply(self._tracker, apiCall.arguments2);
和消息:TypeError: Cannot read property 'apply' of undefined
任何想法?
PS:如果没有事件添加到队列中,它将正常工作。