
??ES6
- ECMAScript 6.0(簡稱ES6)是JavaScript語言的下一代標準, 2015年6月發(fā)布.
- ES6設計目標: 達到JavaScript語言可以用來編寫復雜的大型程序, 成為企業(yè)級開發(fā)語言.
- ECMAScript和JavaScript的關系就: ECMAScript是JavaScript的規(guī)范/規(guī)則, JavaScript是ECMAScript的一種實現(xiàn).
?let變量
let.html
+與,的區(qū)別
let name = "趙志偉";
console.log("name=", name);//使用逗號可以輸出對象的完整信息
console.log("name=" + name);//使用加號, 類似于字符串的拼接. 如果name是對象, 輸出的就是object, 而不會輸出對象的完整信息
let_detail.html
細節(jié)1. let聲明的變量有嚴格的局部作用域
//var聲明的變量, 在代碼塊中, 作用域沒有限制
//let聲明的變量, 在代碼塊中, 則作用域在代碼塊中
{
var name = "趙志偉";
let job = "java工程師";
console.log("name= ", name);
console.log("job= ", job);
}
console.log("name= ", name);
console.log("job= ", job);//job is not defined
細節(jié)2. var 可以聲明多次; let 只能聲明一次
var num1 = 100;
var num1 = 200;
console.log("num1= ", num1);
let num2 = 300;
//SyntaxError 語法錯誤
let num2 = 400;//SyntaxError: redeclaration of var num1
console.log("num2= ", num2);
細節(jié)3. var 存在變量提升; let 不存在變量提升
console.log("x= ", x);//ReferenceError: x is not defined
console.log("y= ", y);//y= undefined[認你這個變量, 不過變量現(xiàn)在還沒有值]
var y = "mary";
console.log("z= ", z);//ReferenceError: can't access lexical declaration 'z' before initialization
let z = "mary";
?const常量
const.html
常量在定義時, 需要賦值; 常量賦值后不能修改
const PI;//SyntaxError: missing = in const declaration
const PI = 3.14;
PI = 3.1415;//TypeError: invalid assignment to const 'PI'
console.log("PI=", PI);
?數(shù)組解構
arr_resolve.html
- 解構賦值是對賦值運算符的擴展
- 是一種針對數(shù)組或者對象進行模式匹配, 對其中的變量進行賦值
- 主要有兩種形式: 數(shù)組解構和對象結構
傳統(tǒng)方式解構
let arr = ["趙志偉",23,"java工程師"];
//如果要看某個變量的類型[,會把所有信息都打印出來]
console.log("arr=>", arr);
//數(shù)組解構
// ※傳統(tǒng)方式
let x = arr[0], y = arr[1], z = arr[2];
console.log(x, y, z);
console.log("=============================================");
ES6風格解構
// ※ES6風格
let [a, b, c] = arr;
console.log(a, b, c);
console.log("=============================================");
let [num1, num2, num3] = ["趙志偉",23,"java工程師"];
console.log(num1, num2, num3);
?對象解構
object_resolve.html
傳統(tǒng)方式解構
//monster是一個對象
let monster = {name: "美猴王", age: 30000};
//傳統(tǒng)方式解構[取出屬性]
console.log(monster.name, " ", monster.age);
ES6對象解構
//ES6對象解構
//1.把monster對象的屬性, 依次賦值給{name,age}
//2.{name,age}的取名name, age要和monster對象的屬性名保持一致
//3.要使用{ }, 不要使用[]
//4.{name,age} 里面的順序是無所謂的
let monster = {name: "美猴王", age: 30000};
let {name, age} = monster;
console.log("name=", name, " age=", age);
console.log("===================================");
//下面這個寫法也可以
// let {name, age} = {name: "牛魔王", age: 35000};
//還有其它的形式, 比如方法上使用對象解構
//如果這樣使用, 仍然要保證 {}名稱 和對象的屬性名一致
function f1({name, age}) {
console.log("f1-name=", name, " ", "f1-age=", age);
}
f1(monster);
?模板字符串
template_str.html
字符串, 換行會原生輸出
//1.字符串, 換行會原生輸出
let str1 = `for(int i = 0; i < 10; i++) {
System.out.println("i=" + i);
}`;
console.log("str1=", str1);
字符串插入變量和表達式. 變量名寫在 ${} 中, ${} 中可以放入 JavaScript 表達式
//2.字符串插入變量和表達式. 變量名寫在 ${} 中, ${} 中可以放入 JavaScript 表達式
let name = "趙志偉";
//(1)當解析 ${name} 時, 就找最近的name變量, 進行替換
//(2)然后可以得到最后解析的字符串
let str2 = `我是${name}`;
let str3 = `1+2=${1 + 2}`;
let n1 = 80;
let n2 = 20;
let str4 = `${n1}+${n2}=${n1 + n2}`;
console.log("str2=", str2);
console.log("str3=", str3);
console.log("str4=", str4);
字符串中調用函數(shù)
//3.字符串中調用函數(shù)
function hello(name) {
return "hello, " + name;
}
let name2 = "mary";
let str5 = `hello() 返回的結果是=${hello("趙志偉")}`;
let str6 = `hello() 返回的結果是=${hello(name2)}`;
console.log("str5=", str5);
console.log("str6=", str6);
?對象聲明簡寫
object.html
const age = 23;
const name = "趙志偉";
//傳統(tǒng) 聲明.定義對象
let monster = {name: name, age: age};
//ES6 聲明.定義對象
//1.{name,age}: 表示對象的屬性名是name和age
//2.屬性name,age的值是從常量/變量 name,age來的
let monster2 = {name, age};
console.log("monster2=", monster2);
?對象方法簡寫
object_method.html
傳統(tǒng)-對象方法定義
//傳統(tǒng)-對象方法定義
let monster = {
name: "玉皇大帝",
age: 10000000,
sayHi: function () {
console.log("信息: name=", this.name, " age=", this.age);
}
}
monster.f2 = function () {
console.log("f2()");
}
monster.sayHi();
monster.f2();
ES6-對象方法定義
let monster2 = {
name: "紅孩兒~",
age: 2000000,
sayHi() {
console.log("信息: name=", this.name, " age=", this.age);
},
f1() {
console.log("f1() ");
}
}
monster2.sayHi();
monster2.f1();
?對象運算符擴展
object_operator.html
拷貝對象-深拷貝
let cat = {name: "小花貓", age: 2};
// let cat2 = cat;對象的引用
// cat2.name = "大花貓";
// console.log("cat=", cat);
// console.log("cat2=", cat2);
//拷貝對象-深拷貝
let cat2 = {...cat};
cat2.name = "中華田園貓";
console.log("cat=", cat);
console.log("cat2=", cat2);
合并對象-深拷貝
//合并對象-深拷貝
let monster = {name: "白骨精", age: 100};
let car = {brand: "奔馳", price: 10000};
let monster_car = {...monster, ...car};
monster_car.name = "狐貍精";
console.log("monster=", monster);
console.log("monster_car=", monster_car);
?箭頭函數(shù)
傳統(tǒng)
//傳統(tǒng)
var f1 = function (n) {
return n * 2;
}
console.log("傳統(tǒng)方式=", f1(3));
ES6, 箭頭函數(shù)使用
//ES6, 箭頭函數(shù)使用
let f2 = (n) => {
return n * 2;
}
console.log(f2);
console.log("箭頭函數(shù)=", f2(999));//1998
//上面的ES6函數(shù)寫法, 還可以簡寫
let f3 = (n) => n * 2;
let f4 = n => n * 2;
console.log("f3=", f3(100));
console.log("f4=", f4(400));
//函數(shù)也可以傳給一個變量
function hi(f5) {
console.log(f5(900));
}
hi(n => n + 1);
hi((n) => {
return n - 1;
})
案例二: 傳統(tǒng)函數(shù)改造成箭頭函數(shù)
//傳統(tǒng)
let f1 = function (n, m) {
let res = 0;
for (let i = n; i <= m; i++) {
res += i;
}
return res;
};
//ES6, 箭頭函數(shù)使用
let f2 = (n, m) => {
let res = 0;
for (let i = n; i <= m; i++) {
res += i;
}
return res;
};
console.log("f2=", f2(1, 10));
案例三: 箭頭函數(shù)+對象解構
const monster = {
name: "美猴王",
age: "30000",
skill: ["筋斗云", "火眼金睛"]
};
//要求: 在方法形參取出monster對象的skill屬性
//傳統(tǒng)方式
let f1 = function (monster) {
console.log("skill=", monster.skill);
}
f1(monster);
//箭頭函數(shù)
let f2 = ({skill}) => {
console.log("skill=", skill);
}
//1.f2傳入對象 monster
//2.f2形參是 {skill}, 所以根據(jù)ES6的對象解構特性, 會把monster對象skill屬性賦給 skill
//3.對象解構的前提 {skill}的skill和 monster 的skill屬性名一致
f2(monster);
//箭頭函數(shù)+解構: 注意有{}, skill名稱需要和對象屬性名一致
//{} 去掉后, monster會賦給name, 所以{}必須帶上才能解構
let f3 = ({name, age, skill}) => {
console.log("name=", name, " ", "age=", age, " ", "skill=", skill);
}
f3(monster);
?作業(yè)布置
- 要求使用模板字符串顯示cat的信息
let cat = {name: "喵喵~", age: 3};
let str = `這是一只小花貓, 名字叫${cat.name}, 年齡${cat.age}歲`;
console.log("str=", str);
- 看下面的代碼, 請問輸出什么, 并分析原因
let dog = {name: "旺財", age: 5};
let {namex, age} = dog;
console.log("namex=", namex, " age=", age);
- 根據(jù)給出的數(shù)據(jù), 用ES6的方式, 構建對象star, 并提供方法, 可以輸出信息
let name = "周星馳";
let job = "喜劇演員";
let star = {
name,
job,
show() {
console.log("star信息為 name=", this.name, " job=", this.job);
}
};
star.show();
- 根據(jù)給出的數(shù)據(jù), 用ES6的方式, 編寫方法. 使用對象解構的方式, 得到oper和arr, 并根據(jù)oper的值 (oper可以是+, -, *, /) , 來計算結果
var cal = {
oper: "*",
arr: [1, 2, 3, 4, 5]
};
let f1 = ({oper, arr}) => {
if (arr == null || arr.length <= 0) {
console.log("數(shù)據(jù)為空");
return;
}
if (arr.length == 1) {
console.log("result=", arr[0]);
return;
}
let result = arr[0];
switch (oper) {
case "+":
for (let i = 1; i < arr.length; i++) {
result += arr[i];
}
console.log("result=", result);
break
case "-":
for (let i = 1; i < arr.length; i++) {
result -= arr[i];
}
console.log("result=", result);
break
case "*":
for (let i = 1; i < arr.length; i++) {
result *= arr[i];
}
console.log("result=", result);
break
case "/":
for (let i = 1; i < arr.length; i++) {
result /= arr[i];
}
console.log("result=", result);
break
}
};
f1(cal);
- 調用 f8 函數(shù), arr是數(shù)組, fun傳入箭頭函數(shù). 可以計算arr的和, 并寫出調用方法
let f8 = (arr, fun) => {
console.log("結果=", fun(arr));
}
f8([1, 2, 3], (arr) => {
let sum = arr[0];
for (let i = 1; i < arr.length; i++) {
sum += arr[i];
}
return sum;
});
??Promise
?需求分析
promise/data/monster.json
{
"id": 1,
"name": "唐僧"
}
promise/data/monster_detail_1.json
{
"id": 1,
"address": "東土大唐",
"skill": "阿彌陀佛",
"age": 30000,
"gf_id": 2
}
promise/data/monster_girlfriend_2.json
{
"id": 2,
"name": "女兒國國王",
"age": 30000
}
?傳統(tǒng)ajax回調嵌套
promise/ajax.html
//jquery發(fā)出ajax請求
$.ajax({
url: "data/monster.json",
//下面是ES6對象方法簡寫形式
success(resultData) {//成功回調處理函數(shù)
console.log("第1次ajax請求 monster基本信息=", resultData);
//發(fā)出第二次ajax請求
$.ajax({
url: `data/monster_detail_${resultData.id}.json`,//模板字符串
success(resultData) {
console.log("第2次ajax請求 monster詳細信息=", resultData);
//$.ajax => Callback Hell
//$.ajax
//$.ajax
},
error(err) {
console.log("第2次ajax請求出現(xiàn)異常 異常信息=", err);
}
})
},
error(err) {
console.log("第1次ajax請求出現(xiàn)異常 異常信息=", err);
},
})
?promise改進
- 創(chuàng)建Promise對象
- 構造函數(shù)傳入一個箭頭函數(shù)
- (resolve, reject)參數(shù)列表
- 如果請求成功, 調用resolve函數(shù); 如果請求失敗, 調用reject函數(shù)
- 箭頭函數(shù)體, 仍然是通過jquery發(fā)出ajax
promise/promise.html
//先請求到monster.json
let p = new Promise((resolve, reject) => {
//發(fā)出ajax請求
$.ajax({
url: "data/monster.json",
success(resultData) {//成功回調函數(shù)
console.log("promise發(fā)出的第1次ajax請求 monster基本信息=", resultData);
resolve(resultData);
},
error(err) {
console.log("promise發(fā)出的第1次異步請求異常, 異常信息=", err);
},
});
})
//在這里我們可以繼續(xù)編寫請求成功后的業(yè)務
p.then((resultData) => {
//這里我們可以繼續(xù)發(fā)出請求
// console.log("p.then 得到 resultData", resultData);
$.ajax({
url: `data/monster_detail_${resultData.id}.json`,//模板字符串
success(resultData) {//第二次ajax請求成功的回調函數(shù)
console.log("promise發(fā)出的第2次ajax請求 monster的詳細信息=", resultData);
},
error(err) {//第2次ajax請求失敗的回調函數(shù)
console.log("promise發(fā)出的第2次異步請求異常, 異常信息=", err);
}
})
});
?promise異常捕獲
let p = new Promise((resolve, reject) => {
//發(fā)出ajax請求
$.ajax({
url: "data/monster.json",
success(resultData) {//成功回調函數(shù)
console.log("promise發(fā)出的第1次ajax請求 monster基本信息=", resultData);
resolve(resultData);
},
error(err) {
//console.log("promise發(fā)出的第1次異步請求異常, 異常信息=", err);
reject(err);
},
});
});
//在這里我們可以繼續(xù)編寫請求成功后的業(yè)務
p.then((resultData) => {
//這里我們可以繼續(xù)發(fā)出請求
// console.log("p.then 得到 resultData", resultData);
return new Promise((resolve, reject) => {//第二次錯誤被捕獲, 但是沒有輸出信息, 原因:這里沒加return
$.ajax({
url: `data/monster_detail1_${resultData.id}.json`,//模板字符串
success(resultData) {//第二次ajax請求成功的回調函數(shù)
console.log("promise發(fā)出的第2次ajax請求 monster的詳細信息=", resultData);
//繼續(xù)進行下一次的請求
},
error(err) {//第2次ajax請求失敗的回調函數(shù)
// console.log("promise發(fā)出的第2次異步請求異常, 異常信息=", err);
reject(err);
}
})
})
}).catch((err) =>{//這里可以對多次ajax請求的異常進行處理
console.log("promise異步請求異常=", err);
});
?promise鏈式調用
//在這里我們可以繼續(xù)編寫請求成功后的業(yè)務
p.then((resultData) => {
//這里我們可以繼續(xù)發(fā)出請求
// console.log("p.then 得到 resultData", resultData);
return new Promise((resolve, reject) => {//第二次錯誤被捕獲, 但是沒有輸出信息, 原因:這里沒加return
$.ajax({
url: `data/monster_detail_${resultData.id}.json`,//模板字符串
success(resultData) {//第二次ajax請求成功的回調函數(shù)
console.log("promise發(fā)出的第2次ajax請求 monster的詳細信息=", resultData);
//繼續(xù)進行下一次的請求
resolve(resultData);
},
error(err) {//第2次ajax請求失敗的回調函數(shù)
// console.log("promise發(fā)出的第2次異步請求異常, 異常信息=", err);
reject(err);
}
})
})
}).then((resultData) => {
// console.log("p.then().then, resultData=", resultData);
//即 可以在這里發(fā)出第3次 ajax請求 => 獲取該妖怪的女友信息
return new Promise((resolve, reject) => {
$.ajax({
url: `data/monster_girlfriend_${resultData.gf_id}.json`,//模板字符串
success(resultData) {//第3次ajax請求成功的回調函數(shù)
console.log("promise發(fā)出的第3次ajax請求 monster的女友信息=", resultData);
//繼續(xù)進行下一次的請求
resolve(resultData);
},
error(err) {//第3次ajax請求失敗的回調函數(shù)
// console.log("promise發(fā)出的第3次異步請求異常, 異常信息=", err);
reject(err);
}
})
})
}).catch((err) => {//這里可以對多次ajax請求的異常進行處理
console.log("promise異步請求異常=", err);
});
?promise代碼重排優(yōu)化
/**
* 這里將重復的代碼, 抽出來, 編寫一個方法get
* @param url ajax請求的資源
* @param data ajax請求攜帶的數(shù)據(jù)
* @returns {Promise<unknown>}
*/
function get(url, data) {
return new Promise((resolve, reject) => {
$.ajax({
url: url,
data: data,
success(resultData) {
resolve(resultData);
},
error(err) {
reject(err);
},
})
})
}
//需求:完成
//1.先獲取monster.json
//2.獲取monster_detail_1.json
//3.獲取monster_girlfriend_2.json
get("data/monster.json").then((resultData) => {
//第1次ajax請求成功后處理代碼
console.log("第1次ajax請求返回數(shù)據(jù)=", resultData);
return get(`data/monster_detail_${resultData.id}.json`);
}).then((resultData) => {
//第2次ajax請求成功后處理代碼
console.log("第2次ajax請求返回數(shù)據(jù)=", resultData);
return get(`data/monster_girlfriend_${resultData.gf_id}.json`);
}).then((resultData) => {
//第3次ajax請求成功后處理代碼
console.log("第3次ajax請求返回數(shù)據(jù)=", resultData);
}).catch(err => {//箭頭函數(shù)只有一個參數(shù), 可以不用()小括號
console.log("promise請求異常=", err);
})
?作業(yè)布置
分別使用jquery-ajax 和 promise代碼重排, 完成如下功能. 發(fā)出3次ajax請求, 獲取對應的數(shù)據(jù), 注意體會promise發(fā)出多次ajax請求的便利之處
??模塊化編程
?基本介紹
- 傳統(tǒng)非模塊化開發(fā)有如下的缺點: (1) 命名沖突; (2) 文件依賴
- JavaScript代碼越來越龐大, JavaScript引入模塊化編程, 開發(fā)者只需要實現(xiàn)核心的業(yè)務邏輯, 其它都可以加載別人已經寫好的模塊
- JavaScript使用 “模塊” 的概念來實現(xiàn)模塊化編程, 解決非模塊化編程問題
- 模塊化也是ES6的新特性
?原理示意圖
?ES5模塊化編程
ES5模塊化編程也叫CommonJS模塊化編程
- 每個js文件就是一個模塊, 有自己的作用域. 在文件中定義的變量, 函數(shù), 類, 都是私有的, 對其它文件是不可用的
- CommonJS使用
module.exports={ } / exports={ }
導出模塊, 使用let/const 名稱 = require("xx.js")
導入模塊`
需求說明
- 編寫 functions.js, 該文件有函數(shù), 變量, 常量, 對象, 數(shù)組…
- 要求在use.js中, 可以使用到function.js中定義的 函數(shù)/變量/常量/對象/數(shù)組
- 要求使用模塊化編程的方式完成
思路分析
module/es5/function.js
//定義對象, 變量, 常量, 函數(shù)
const sum = function (num1, num2) {
return parseInt(num1) + parseInt(num2);
};
const sub = function (num1, num2) {
return parseInt(num1) - parseInt(num2);
};
let name = "趙志偉";
const PI = 3.14;
const monster = {
name: "鐵扇公主",
age: 300,
sayHi() {
console.log("鐵扇公主");
},
};
/*導出
1.module.exports 導出模塊
2.把要導出的數(shù)據(jù), 寫入到 { } 中即可
3.可以全部導出, 也可以部分導出
4.相當于把導出的數(shù)據(jù)當作一個對象
5.如果屬性名/函數(shù)/變量/對象..名字相同, 可以簡寫
6.有些前端, 簡寫 module.exports={} 成 exports={}
*/
exports = {
sum,
sub,
name,
PI
}
// module.exports = {
// sum,
// sub,
// name,
// PI
// }
// module.exports = {
// sum: sum,
// sub: sub,
// myName: name
// }
在module/es5/use.html 中 查看效果
<head>
<meta charset="UTF-8">
<title>use</title>
<!--在html文件中要使用js-->
<script type="text/javascript>" src="function.js"></script>
</head>
module/es5/use.js
//導入
//1.在es5中, 我們通過 require 就把對應.js中的數(shù)據(jù)/對象, 引入
//2.我們使用的時候, 通過m.屬性, 就可以使用
//3.如果我們導入時, 不需要所有的, 我們可以導入部分數(shù)據(jù)
const m = require("./function");//默認后綴js
const {sub} = require("./function");
//使用
//只要這里idea可以識別變量,函數(shù),對象 說明沒有問題
console.log(m.sub("1", "2"));
console.log(m.sum(33, 22));
console.log(m.name);
console.log(sub(10, 12));
?ES6模塊化編程
- ES6使用 (1)
export {名稱 / 對象 / 函數(shù) / 變量 / 常量}
(2)export 定義 =
(3)export default { }
導出模塊 - 使用
import { } from "xx.js"
或者import 名稱 from "xx.js"
導入模塊
需求說明
- 編寫common.js, 該文件有函數(shù), 變量, 常量, 對象
- 要求在use_common.js, 可以使用到 common.js中定義的 函數(shù)/變量/常量/對象
- 使用ES6模塊化編程的方式完成
思路分析
??批量導出
common.js
//定義對象, 變量, 常量, 函數(shù)
const sum = function (num1, num2) {
return parseInt(num1) + parseInt(num2);
};
const sub = function (num1, num2) {
return parseInt(num1) - parseInt(num2);
};
let name = "趙志偉";
//ES6的導出模塊/數(shù)據(jù)
/**
* 1.export 就是導出
* 2.可以全部導出, 也可以部分導出
*/
export {
sum,
sub,
name
}
use_common.js
/**導入
* 1.我們可以用 {} 來接收導出的數(shù)據(jù)
* 2.可以全部接收, 也可以選擇接收
* 3.要求導入的名稱 和 導出的名稱一致
*/
import {sub, sum, name} from "./common";
//使用
console.log(sum(1, 3));
console.log(name);
??定義時導出
common2.js
//定義對象, 變量, 常量, 函數(shù)
//定義sum函數(shù)時, 直接導出
//說明: 如果在定義時,導出的數(shù)據(jù), 在導入時,要保持名稱一致
export const sum = function (num1, num2) {
return parseInt(num1) + parseInt(num2);
};
use_common2.js
//可以導入模塊/數(shù)據(jù)
import {sum} from "./common2";
//沒有導出的數(shù)據(jù), 是不可以導入的
import {sum2} from "./common2";
console.log(sum(10, 12));
??默認導出
common3.js
//定義對象, 變量, 常量, 函數(shù)
//演示默認導出
//如果是默認導出, 那么在導入的時候,使用的語法
//可以這么理解: 類似于把 {} 當作一個對象導出
export default {
sum(num1, num2) {
return parseInt(num1) + parseInt(num2);
},
sub(num1, num2) {
return parseInt(num1) - parseInt(num2);
},
}
use_common3.js
//導入默認導出的模塊/數(shù)據(jù)
//好處是 m 名稱是可以自己指定的
//因為m名字, 程序員可以自己指定, 因此我們就可以解決命名沖突的問題
import m from "./common3";
//使用 m.xx
console.log(m.sub(100, 200));
??注意事項和細節(jié)
- ES6的模塊化無法在Node.js中執(zhí)行, 需要用Babel轉碼ES5后再執(zhí)行
老師說明: ES6 的模塊化,需要用 Babel 轉碼 ES5 后再執(zhí)行, 我們后面在整體項目中使用即可, 只要 es6_use.js 可以識別變量名說明是正確的 - export不僅可以導出對象, 一切JS變量都可以導出. 比如: 基本類型變量, 函數(shù), 數(shù)組, 對象
- 沒有導出的不能使用
- ES6的導出方式很多, 不同的導出方式對導入方式也有一定影響
?作業(yè)布置
- 請編寫一個文件zzwcommon,js, 該文件有對象cat(屬性: name, age, cry()) dog(屬性: name, age, hello()).
- 編寫use_zzwcommon.js, 在該文件中使用zzwcommon.js 導出的模塊/對象/數(shù)組, 體會使用特點
使用批量導出
zzwcommon.js
let cat = {
name: "喵喵~",
age: 2,
cry() {
console.log("花喵哭泣");
},
};
let dog = {
name: "旺財",
age: 3,
hi() {
console.log("汪汪");
},
};
// 批量導出
export {cat, dog};
use_zzwcommon.js
import {dog, cat} from "./zzwcommon";
console.log(cat.age);
console.log(cat.name);
cat.cry();
創(chuàng)建時, 直接導出
//定義時導出
export const cat = {
name: "喵喵~",
age: 2,
cry() {
console.log("花喵哭泣");
}
}
export const dog = {
name: "旺財",
age: 3,
hi() {
console.log("汪汪");
}
}
默認方式導出
zzwcommon.js
//默認方式導出
//這里注意 寫法有一些變化, 把我們的兩個對象當做 {} 的屬性即可
export default {
cat: {
name: "喵喵~",
age: 2,
cry() {
console.log("花喵哭泣");
},
},
dog: {
name: "旺財",
age: 3,
hi() {
console.log("汪汪");
},
},
}
use_zzwcommon.js
//導入zzwcommon.js 默認導出的模塊
import m from "./zzwcommon";
console.log(m.dog.age);
console.log(m.dog.name);
m.dog.hi();
3.a.js有一個dog對象(含有hi()方法), b.js中有一個dog對象(含有say()方法), 請使用模塊化的編程思路, 在a.js中能使用到不同的dog對象,
b.js文章來源:http://www.zghlxwxcb.cn/news/detail-514982.html
//b.js中定義了dog對象
//方式一
export default {
dog: {
say() {
},
},
};
//方式二
let dog = {
say() {
},
};
export default {
dog: dog,
};
a.js文章來源地址http://www.zghlxwxcb.cn/news/detail-514982.html
import m from "./b";
//a.js中的dog
const dog = {
hi() {
},
};
console.log(dog.hi());//a.js
console.log(m.dog.say());//b.js
到了這里,關于前端技術棧 - ES6 - Promise -模塊化編程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!