首页 > 解决方案 > 如何从方法 JS 访问类变量

问题描述

我是新手,javascript我正在尝试使用某种方法创建一个简单的类,但我有一个问题,我不知道我做错了什么。

var SpotifyWebApi = require('spotify-web-api-node');

const my_client_id = "xxx";
const my_secret = "xxx";

class Spotify {
    constructor() {
         this.spotifyApi = new SpotifyWebApi({
            redirectUri: 'http://localhost:8081/spotifyCallback',
            clientId: my_client_id,
            clientSecret: my_secret
        }); 
    }

    connect() {
        console.log(this.spotifyApi.redirectUri);
        return spotifyApi.createAuthorizeURL('teststate', ['user-read-private', 'user-read-email']);
    };
}

在这里,当我尝试登录控制台 spotifyApi.redirectUri 时,我得到未定义(尝试使用和不使用 this 关键字)。

标签: javascriptnode.jsasynchronousspotify

解决方案


这是因为您的库(https://github.com/thelinmichael/spotify-web-api-noderedirectUri在实例化它时用作选项,但没有将其作为属性公开。

如果您仍然需要它,请使用以下内容放入redirectUri类属性:

const SpotifyWebApi = require('spotify-web-api-node');

class Spotify {
    constructor(my_client_id, my_secret) {
         this.redirectUri = 'http://localhost:8081/spotifyCallback';
         this.spotifyApi = new SpotifyWebApi({
            redirectUri: this.redirectUri,
            clientId: my_client_id,
            clientSecret: my_secret
        }); 
    }

    connect() {
        console.log(this.redirectUri);
        return this.spotifyApi.createAuthorizeURL('teststate', ['user-read-private', 'user-read-email']);
    };
}

const my_client_id = "xxx";
const my_secret = "xxx";

// Now you can instantiate your class with this :
const spotify = new Spotify(my_client_id, my_secret);
const yourToken = spotify.connect();

我用一些好的做法编辑了我的答案(添加构造函数参数,使用this......)


推荐阅读