Javascript 在另一个方法中调用原型方法会导致';不是一个函数';
我不确定我做错了什么,因为我以前的模式很好 尝试运行以下代码时出现此错误:Javascript 在另一个方法中调用原型方法会导致';不是一个函数';,javascript,node.js,prototype,Javascript,Node.js,Prototype,我不确定我做错了什么,因为我以前的模式很好 尝试运行以下代码时出现此错误: this.getSpotifyApi is not a function 不确定它为什么会丢失此范围。以下是对象定义的开头: const logger = require('logger'); const SpotifyApiNode = require('spotify-web-api-node'); module.exports = SpotifyApi; function SpotifyApi(userRef
this.getSpotifyApi is not a function
不确定它为什么会丢失此范围。以下是对象定义的开头:
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
调用时,它似乎总是有效的,但第二个总是失败。不确定我在这种情况下做了什么不同的事情导致了这个问题。一个箭头函数将定义它的上下文的this
绑定到该函数。因此,如果您从SpotifyApi
创建一个实例并调用initializeApi
,那么initializeApi
中的this
不是该对象的实例,而是其他某个对象
将箭头函数更改为常规函数,它将工作:
SpotifyApi.prototype.initializeApi = function() {
let self = this;
logger.info(this.refreshToken);
this.getSpotifyApi(this.refreshToken)
.then((api) => {
self.api = api;
});
};
对分配给SpotifyApi.prototype的所有其他函数执行相同的操作