Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在另一个方法中调用原型方法会导致';不是一个函数';_Javascript_Node.js_Prototype - Fatal编程技术网

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的所有其他函数执行相同的操作