不知道我在这里做错了什么,因为我以前有做过这种模式。
尝试运行以下代码时出现此错误:
this.getSpotifyApi is not a function
不确定为什么失去了this
范围。这是对象定义的开始:
const logger = require('logger');
const SpotifyApiNode = require('spotify-web-api-node');
module.exports = SpotifyApi;
function SpotifyApi(userRefreshToken) {
this.refreshToken = userRefreshToken;
this.initializeApi()
.then(() => logger.debug('api object initialized'));
};
/**
* initialize api object
*/
SpotifyApi.prototype.initializeApi = () => {
let self = this;
logger.info(this.refreshToken);
this.getSpotifyApi(this.refreshToken)
.then((api) => {
self.api = api;
});
};
/**
* get a spotify api wrapper object
*/
SpotifyApi.prototype.getSpotifyApi = (userToken) => {
if (userToken)
return this.getUserTokenApi(userToken);
return this.getServerTokenApi();
};
根据我的测试,当this.function
调用是对象实例化后第一个被调用,而第二个总是失败时,它似乎总是可以工作。不知道在这种情况下我正在做些什么导致此问题。
答案 0 :(得分:1)
箭头函数将其定义的上下文的this
绑定到该函数。因此,如果您从SpotifyApi
创建一个实例并对其调用initializeApi
,则this
中的initializeApi
不是该对象的实例,而是其他某个对象。< / p>
将箭头功能更改为常规功能,它将起作用:
SpotifyApi.prototype.initializeApi = function() {
let self = this;
logger.info(this.refreshToken);
this.getSpotifyApi(this.refreshToken)
.then((api) => {
self.api = api;
});
};
对您分配给SpotifyApi.prototype
的所有其他功能执行相同操作