http://0.0.0.0:3000
) ก็ได้ mocha.html
ไฟล์ .html หน้าเว็บmaccha.js
ไฟล์ .js ที่เขียนโค้ดจาวาสคริปต์ตัวหลักที่จะถูกเรียกไปลงในรันในหน้าเว็บmomo.js
ไฟล์ .js ที่ใส่โค้ดมอดูลที่จะถูกเรียกไปใช้ใน .js อีกไฟล์momo.js
export function sawatdi(){
alert("สวัสดีชาวโลก! 你好,世界");
}
maccha.js
import {sawatdi} from './momo.js';
sawatdi();
mocha.html
<meta charset="UTF-8" />
<script src="./maccha.js" type="module"></script>
mocha.html
ขึ้นมาก็จะเด้งขึ้นมาแบบนี้momo.js
จะถูกนำไปใช้ได้โดยคำสั่ง export
ส่วนในไฟล์ maccha.js
ให้ใช้คำสั่ง import
เพื่อดึงฟังก์ชัน sawatdi มาใช้mocha.html
เขียนเรียกโค้ดของ maccha.js
ผ่านแท็ก script โดยในที่นี้ในแท็กจำเป็นต้องใส่ type="module"
ด้วย ไม่เช่นนั้นจะเกิดข้อผิดพลาดimport
ได้ ถ้าไม่ทำให้ไฟล์หลัก (ไฟล์ที่ถูกเรียกจาก html โดยตรง ในที่นี้คือ maccha.js) เป็นมอดูลด้วย ซึ่งการใส่ type="module"
ก็คือเพื่อกำหนดชนิดให้โค้ดในไฟล์นั้นเป็นมอดูลtype="module"
แล้วเจอข้อผิดพลาด โดยชี้ปัญหาที่เกี่ยวกับ CORS แบบนั้นอาจหมายความว่ากำลังรันผ่านไฟล์ในเครื่อง ไม่ได้เอาลงเว็บดังที่กล่าวข้างต้น ทำให้โดนเบราว์เซอร์ป้องกันexport
เพื่อจะนำข้อมูลจากในนั้นไปใช้ในไฟล์อื่น ในขณะที่ไฟล์ที่จะเรียกใช้มอดูลต้องใช้คำสั่ง export
export
เฉยๆธรรมดากับ export default
ในที่นี้จะเริ่มจาก export
ธรรมดาก่อนexport
นำหน้าฟังก์ชันหรือตัวแปรต่างๆที่ต้องการเอาไปใช้// ประกาศและ export ค่าคงที่
export const planck = 6.62607004e-34;
// ประกาศและ export ฟังก์ชัน
export function thakthai(){
alert("คนนิจิวะ");
};
// ประกาศฟังก์ชันและค่าก่อนแล้วค่อย export
let matane = "มาตะเน้";
function bokla(){
alert(matane+"~~");
};
export {bokla, matane};
import {ชื่อตัวแปร, ...} from ชื่อไฟล์มอดูล
import {planck, matane, thakthai, bokla} from './momo.js';
alert(planck); // ได้ 6.62607004e-34
thakthai(); // ได้ คนนิจิวะ
alert(matane); // ได้ มาตะเน้
bokla(); // ได้ มาตะเน้~~
import * as ชื่อที่ต้องการแทนมอดูล from ชื่อไฟล์มอดูล
แล้วเวลาจะใช้ก็ต้องใส่ชื่อที่แทนมอดูลนั้นลงไปนำหน้าแล้วค่อยตามด้วยชื่อตัวแปรหลังจุดimport * as momi from './momo.js';
alert(momi.planck);
momi.thakthai();
alert(momi.matane);
momi.bokla();
as
ให้ตัวที่ต้องการเปลี่ยนแล้วตามด้วยชื่อที่ต้องการ ส่วนตัวไหนไม่ได้ต้องการเปลี่ยนชื่อก็ไม่ต้องใส่ as
ก็ได้import {planck as h, thakthai as tt, matane as mtn, bokla} from './momo.js';
alert(h); // ได้ 6.62607004
tt(); // ได้ คนนิจิวะ
alert(mtn); // ได้ มาตะเน้~
bokla(); // ได้ มาตะเน้~
export
ธรรมดาแล้ว อีกวิธีการคือใช้ export default
คือการรวมข้อมูลทั้งหมดอยู่ในออบเจ็กต์เดียวแล้ว export ออกไปexport default
ตามด้วยออบเจ็กต์ที่ต้องการเอาไปใช้let c = 299792458;
const PI = 3.14159;
export default { c, PI };
import momi from "./momo.js"
alert(momi) // ได้ [object Object]
alert(momi.c) // ได้ 299792458
alert(momi.PI) // ได้ 3.14159
export
ธรรมดาตรงที่ไม่ต้องใช้ {} คร่อมexport default
นั้นสามารถทำได้แค่ตัวเดียว แต่ว่าโดยทั่วไปสิ่งที่ export default
จะเป็นออบเจ็กต์ที่ใส่ค่าอะไรต่างๆอยู่ข้างใน ดังนั้นผลที่ได้ก็ไม่ต่างจากการ export ตัวแปรทีละตัว แต่ต้องระวังว่าการ import จะต่างกันexport default
จะไม่ใช่ออบเจ็กต์แต่เป็นอย่างอื่นก็ได้ แม้จะดูไม่ค่อยมีความหมายที่จะทำอย่างนั้นนักexport default
ค่าตัวเลขแบบนี้ในมอดูลexport default 1000;
import momi from "./momo.js"
alert(momi) // ได้ 1000
export
ธรรมดาและ export default
สามารถใช้ได้ในเวลาเดียวกัน เช่นทำแบบนี้const R = 8.31446262;
let u = 1.66053907e-27;
export {R, u};
export default {
e: 1.60217663e-19,
G: 6.6743e-11
};
import momi, { R, u } from "./momo.js"
alert(momi.e) // ได้ 1.60217663e-19
alert(momi.G) // ได้ 6.6743e-11
alert(R) // ได้ 8.31446262
alert(u) // ได้ 1.66053907e-27
import
เป็น ๒ ส่วน ส่วน momi นี่คือแทนส่วนที่ export default
ส่วน { R, u } แทนส่วนของ R และ u ที่ export
แบบธรรมดามาimport momi, * as momo from "./momo.js"
alert(momi.e)
alert(momi.G)
alert(momo.R)
alert(momo.u)
let NAK = Symbol();
let SUNG = Symbol();
class Pokemon {
constructor(chue,nak, sung){
this.chue = chue;
this[NAK] = nak;
this[SUNG] = sung;
}
bokKhomun(){
alert(this.chue +" หนัก "+this[NAK] + " กก. สูง "+this[SUNG], "ม.");
}
}
export {Pokemon}
import {Pokemon} from "./momo.js";
let kamonegi = new Pokemon("คาโมเนงิ", 15, 0.8);
kamonegi.bokKhomun(); // ได้ คาโมเนงิ หนัก 15 กก. สูง 0.8
alert(kamonegi.chue); // ได้ คาโมเนงิ
const KHOMUN = Symbol();
class Digimon {
constructor(chue, lv) {
this.chue = chue;
this.lv = lv;
}
// เมธอดส่วนตัว
[KHOMUN]() {
return this.chue + " lv " + this.lv;
}
// เมธอดที่จะเรียกใช้เมธอดส่วนตัว
bokKhomun() {
alert(this[KHOMUN]());
}
}
export { Digimon };
import {Digimon} from "./momo.js";
let agumon = new Digimon("อากุมอน",11);
agumon.bokKhomun(); // ได้ อากุมอน lv 11
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ