2016-05-13 16 views
-1

私はAPIラッパーを作成し、es6クラスを使用してAxiosから拡張することに興味があります。これはどのように可能ですか? Axiosは新しいaxiosは私がこのlet instance = axios.create()へのアクセス権を持って知っているes6クラスを使ってAxiosを拡張する

class Api extends Axios { 
    constructor(...args){ 
    super(..args) 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

オブジェクトあなたが生成することを可能にする方法の.create()を持っています。

どのような考えですか?

試み1

import axios from 'axios' 
const Axios = axios.create() 

class Api extends Axios { 
    constructor (...args) { 
    super(...args) 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

let api = new Api() 

api.cancelOrder('hi') 
    .then(console.log) 
    .catch(console.log) 

試み2

import axios from 'axios' 

class Axios { 
    constructor() { 
    return axios.create() 
    } 
} 

class Api extends Axios { 
    constructor() { 
    super() 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

let api = new Api() 

console.log(api.__proto__) 

api.cancelOrder('hi') 
    .then(console.log) 
    .catch(console.log) 
+0

私はここでの問題を確認していませんか? – Tuvia

+0

@Tuvia問題はAxiosを拡張しようとしているのですが、できません:( – ThomasReggi

+0

あなたはes6で 'object'を拡張することはできませんが、プロトタイプを拡張することはできますが、あなたが 'new MyClass'を実行しなければならないクラス(es6で定義されています)と' MyClass'はあなたが拡張できるものです – Tuvia

答えて

0

あなたがsource codeを見れば、彼らは、Axiosのためだけのインスタンスを "クラス" を公開していないようです。

インスタンスオブジェクトをes6で拡張できるとは思いません。


あなたの第二の試み最も実行可能なようだが、あなたはすべての単一axios方法をエミュレートしたい場合は、あなた多くのオーバーヘッドを有することができます。

+0

私はちょっと混乱していると思いますが、 "新しいインスタンスを作成するためのファクトリ"が実装されていて、なぜAxiosへのアクセスがエクスポートされていないのですか? – ThomasReggi

+0

私は分かりません。 80](https://github.com/mzabriskie/axios/blob/master/lib/axios.js#L80)実際の 'Axios'"クラス "を公開したい場合は、プロジェクトを行い、そうするためのPRを出してください(その間はあなたのフォークを使っています) – Tuvia

+0

do ne 'npm install axios-es6' – ThomasReggi

0

axiosは、現在内部で使用するAxiosオブジェクトをエクスポートしていません。

.create()メソッドは、新しいインスタンスをインスタンス化するだけです。

// Factory for creating new instances 
axios.create = function create(defaultConfig) { 
    return new Axios(defaultConfig); 
}; 

私はAxiosクラスをエクスポートするprを作成しました。

https://github.com/reggi/axios/commit/7548f2f79d20031cd89ea7c2c83f6b3a9c2b1da4

そしてここgithubの問題:

https://github.com/mzabriskie/axios/issues/320

関連する問題