エクスポートする値のフォーマット
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ エクスポートされるのは一つのインスタンスだけでクラスなどはエクスポートされない
◆ 基本はひとつのインスタンスしか使わないから new しなくてもすぐに使える
◆ メソッドに新しいインスタンスを作るものがあって別の設定のインスタンスと共存できる
◆ 基本はひとつのインスタンスしか使わないから new しなくてもすぐに使える
◆ メソッドに新しいインスタンスを作るものがあって別の設定のインスタンスと共存できる
モジュールをエクスポートするとき たいていはプロパティがいろいろセットされたオブジェクトやひとつのクラスだと思います
使う側はこのようにプロパティの関数を使ったり インポートしたクラスを new したりが基本です
今回はたまたま珍しめの ひとつのインスタンスをエクスポートしてるものを見つけました
いっぱいインスタンスを作るならともかく 基本ひとつしか使わないなら new する手間も省けて楽ですからね
ひとつのインスタンスだと class を new するのではなく 単純にオブジェクトを作って export してるのも一緒です
でも
でも 基本使うときは同じです
今回 「ひとつのインスタンス(下側のこと)」と書いたのは メソッドの一つとして新しいインスタンスを作る機能があったからです
それならクラスをエクスポートで良さそうですが インスタンスがエクスポートされてそのメソッドで新規インスタンスが作れました
そのインスタンスのクローンかと思いきや 完全新規作成のインスタンスで設定類も初期化されたものが作られました
こういう感じです
動かしてみるとこうなります
new メソッドでは設定が引き継がれず copy メソッドでは引き継がれます
コピーはともかく new はここに作る必要あるのかなと思いましたが 基本はひとつのインスタンスだけで即使えることを優先するとこっちのほうが良い のかもしれません
使う側はこのようにプロパティの関数を使ったり インポートしたクラスを new したりが基本です
import a from "./a.js"
import B from "./b.js"
console.log(a.create(10))
console.log(new a.Class(10))
console.log(new B())
今回はたまたま珍しめの ひとつのインスタンスをエクスポートしてるものを見つけました
いっぱいインスタンスを作るならともかく 基本ひとつしか使わないなら new する手間も省けて楽ですからね
ひとつのインスタンスだと class を new するのではなく 単純にオブジェクトを作って export してるのも一緒です
export default {
value: {},
add(k, v){
this.value[k] = v
},
print(){
for(const [k, v] of Object.entries(this.value)){
console.log(k, v)
}
},
}
でも
export default new class {
constructor(){
this.value = {}
}
add(k, v){
this.value[k] = v
}
print(){
for(const [k, v] of Object.entries(this.value)){
console.log(k, v)
}
}
}
でも 基本使うときは同じです
今回 「ひとつのインスタンス(下側のこと)」と書いたのは メソッドの一つとして新しいインスタンスを作る機能があったからです
それならクラスをエクスポートで良さそうですが インスタンスがエクスポートされてそのメソッドで新規インスタンスが作れました
そのインスタンスのクローンかと思いきや 完全新規作成のインスタンスで設定類も初期化されたものが作られました
こういう感じです
export default new class {
constructor() {
this.values = { a: 1, b: 2 }
}
new() {
return new this.constructor()
}
copy() {
const inst = this.new()
inst.values = JSON.parse(JSON.stringify(this.values))
return inst
}
}()
動かしてみるとこうなります
import x from "./x.js"
x.values
// {a: 1, b: 2}
x.values.c = 3
x.values
// {a: 1, b: 2, c: 3}
const y = x.new()
y.values
// {a: 1, b: 2}
const z = x.copy()
z.values
// {a: 1, b: 2, c: 3}
z.values.a = 10
delete z.values.c
z.values
// {a: 10, b: 2}
x.values
// {a: 1, b: 2, c: 3}
new メソッドでは設定が引き継がれず copy メソッドでは引き継がれます
コピーはともかく new はここに作る必要あるのかなと思いましたが 基本はひとつのインスタンスだけで即使えることを優先するとこっちのほうが良い のかもしれません