[{"data":1,"prerenderedAt":1945},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fes6-functions-classes":3,"docs-all":1764},{"id":4,"title":5,"body":6,"category":1749,"date":1750,"description":1751,"draft":1752,"extension":1753,"meta":1754,"navigation":163,"path":1755,"seo":1756,"source":1757,"stem":1758,"tags":1759,"__hash__":1763},"docs\u002Fdocs\u002Fes6-functions-classes.md","ES6 函数与 Class",{"type":7,"value":8,"toc":1735},"minimark",[9,14,24,29,52,436,439,444,451,513,519,522,644,650,654,673,765,774,788,792,798,1042,1051,1054,1057,1174,1319,1322,1326,1545,1559,1563,1577,1673,1676,1679,1731],[10,11,13],"h1",{"id":12},"函数与-class","函数与 Class",[15,16,17,18,23],"p",{},"示例按主题拆分，独立运行。函数参数解构的基础见 ",[19,20,22],"a",{"href":21},"\u002Fdocs\u002Fes6-basics","ES6 基础","。",[25,26,28],"h2",{"id":27},"默认参数和-rest","默认参数和 rest",[15,30,31,32,36,37,40,41,40,44,47,48,51],{},"默认参数只对缺省值或 ",[33,34,35],"code",{},"undefined"," 生效，",[33,38,39],{},"0","、",[33,42,43],{},"false",[33,45,46],{},"null"," 都会被保留。用 ",[33,49,50],{},"a || 默认值"," 会错误覆盖合法的假值。",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-js shiki shiki-themes github-light github-dark","function sum(a = 1, b = 5) { return a + b; }\nconsole.log(sum(), sum(2), sum(2, 0)); \u002F\u002F 6 7 2\n\nfunction legacySum(a, b) {\n  a = a === undefined ? 3 : a;\n  b = b === undefined ? 2 : b;\n  return a + b;\n}\nconsole.log(legacySum(1, 0)); \u002F\u002F 1，原例结果正确，错误的是课堂注释\n\nfunction options({ a = 3, b = 8 } = {}) { return a + b; }\nconsole.log(options({ num1: 3, num2: 10 })); \u002F\u002F 11：属性名不匹配，使用默认值\n\nfunction collect(first, second, ...rest) { return rest; }\nconsole.log(collect(1, 2, 3, 4, 5)); \u002F\u002F [3, 4, 5]\n","js","",[33,60,61,114,158,165,184,213,238,250,256,282,287,329,359,364,397],{"__ignoreMap":58},[62,63,66,70,74,78,81,84,88,91,94,96,99,102,105,108,111],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"szBVR","function",[62,71,73],{"class":72},"sScJk"," sum",[62,75,77],{"class":76},"sVt8B","(",[62,79,19],{"class":80},"s4XuR",[62,82,83],{"class":68}," =",[62,85,87],{"class":86},"sj4cs"," 1",[62,89,90],{"class":76},", ",[62,92,93],{"class":80},"b",[62,95,83],{"class":68},[62,97,98],{"class":86}," 5",[62,100,101],{"class":76},") { ",[62,103,104],{"class":68},"return",[62,106,107],{"class":76}," a ",[62,109,110],{"class":68},"+",[62,112,113],{"class":76}," b; }\n",[62,115,117,120,123,125,128,131,133,135,138,141,143,145,147,149,151,154],{"class":64,"line":116},2,[62,118,119],{"class":76},"console.",[62,121,122],{"class":72},"log",[62,124,77],{"class":76},[62,126,127],{"class":72},"sum",[62,129,130],{"class":76},"(), ",[62,132,127],{"class":72},[62,134,77],{"class":76},[62,136,137],{"class":86},"2",[62,139,140],{"class":76},"), ",[62,142,127],{"class":72},[62,144,77],{"class":76},[62,146,137],{"class":86},[62,148,90],{"class":76},[62,150,39],{"class":86},[62,152,153],{"class":76},")); ",[62,155,157],{"class":156},"sJ8bj","\u002F\u002F 6 7 2\n",[62,159,161],{"class":64,"line":160},3,[62,162,164],{"emptyLinePlaceholder":163},true,"\n",[62,166,168,170,173,175,177,179,181],{"class":64,"line":167},4,[62,169,69],{"class":68},[62,171,172],{"class":72}," legacySum",[62,174,77],{"class":76},[62,176,19],{"class":80},[62,178,90],{"class":76},[62,180,93],{"class":80},[62,182,183],{"class":76},") {\n",[62,185,187,190,193,195,198,201,204,207,210],{"class":64,"line":186},5,[62,188,189],{"class":76},"  a ",[62,191,192],{"class":68},"=",[62,194,107],{"class":76},[62,196,197],{"class":68},"===",[62,199,200],{"class":86}," undefined",[62,202,203],{"class":68}," ?",[62,205,206],{"class":86}," 3",[62,208,209],{"class":68}," :",[62,211,212],{"class":76}," a;\n",[62,214,216,219,221,224,226,228,230,233,235],{"class":64,"line":215},6,[62,217,218],{"class":76},"  b ",[62,220,192],{"class":68},[62,222,223],{"class":76}," b ",[62,225,197],{"class":68},[62,227,200],{"class":86},[62,229,203],{"class":68},[62,231,232],{"class":86}," 2",[62,234,209],{"class":68},[62,236,237],{"class":76}," b;\n",[62,239,241,244,246,248],{"class":64,"line":240},7,[62,242,243],{"class":68},"  return",[62,245,107],{"class":76},[62,247,110],{"class":68},[62,249,237],{"class":76},[62,251,253],{"class":64,"line":252},8,[62,254,255],{"class":76},"}\n",[62,257,259,261,263,265,268,270,273,275,277,279],{"class":64,"line":258},9,[62,260,119],{"class":76},[62,262,122],{"class":72},[62,264,77],{"class":76},[62,266,267],{"class":72},"legacySum",[62,269,77],{"class":76},[62,271,272],{"class":86},"1",[62,274,90],{"class":76},[62,276,39],{"class":86},[62,278,153],{"class":76},[62,280,281],{"class":156},"\u002F\u002F 1，原例结果正确，错误的是课堂注释\n",[62,283,285],{"class":64,"line":284},10,[62,286,164],{"emptyLinePlaceholder":163},[62,288,290,292,295,298,300,302,304,306,308,310,313,316,318,321,323,325,327],{"class":64,"line":289},11,[62,291,69],{"class":68},[62,293,294],{"class":72}," options",[62,296,297],{"class":76},"({ ",[62,299,19],{"class":80},[62,301,83],{"class":68},[62,303,206],{"class":86},[62,305,90],{"class":76},[62,307,93],{"class":80},[62,309,83],{"class":68},[62,311,312],{"class":86}," 8",[62,314,315],{"class":76}," } ",[62,317,192],{"class":68},[62,319,320],{"class":76}," {}) { ",[62,322,104],{"class":68},[62,324,107],{"class":76},[62,326,110],{"class":68},[62,328,113],{"class":76},[62,330,332,334,336,338,341,344,347,350,353,356],{"class":64,"line":331},12,[62,333,119],{"class":76},[62,335,122],{"class":72},[62,337,77],{"class":76},[62,339,340],{"class":72},"options",[62,342,343],{"class":76},"({ num1: ",[62,345,346],{"class":86},"3",[62,348,349],{"class":76},", num2: ",[62,351,352],{"class":86},"10",[62,354,355],{"class":76}," })); ",[62,357,358],{"class":156},"\u002F\u002F 11：属性名不匹配，使用默认值\n",[62,360,362],{"class":64,"line":361},13,[62,363,164],{"emptyLinePlaceholder":163},[62,365,367,369,372,374,377,379,382,384,387,390,392,394],{"class":64,"line":366},14,[62,368,69],{"class":68},[62,370,371],{"class":72}," collect",[62,373,77],{"class":76},[62,375,376],{"class":80},"first",[62,378,90],{"class":76},[62,380,381],{"class":80},"second",[62,383,90],{"class":76},[62,385,386],{"class":68},"...",[62,388,389],{"class":80},"rest",[62,391,101],{"class":76},[62,393,104],{"class":68},[62,395,396],{"class":76}," rest; }\n",[62,398,400,402,404,406,409,411,413,415,417,419,421,423,426,428,431,433],{"class":64,"line":399},15,[62,401,119],{"class":76},[62,403,122],{"class":72},[62,405,77],{"class":76},[62,407,408],{"class":72},"collect",[62,410,77],{"class":76},[62,412,272],{"class":86},[62,414,90],{"class":76},[62,416,137],{"class":86},[62,418,90],{"class":76},[62,420,346],{"class":86},[62,422,90],{"class":76},[62,424,425],{"class":86},"4",[62,427,90],{"class":76},[62,429,430],{"class":86},"5",[62,432,153],{"class":76},[62,434,435],{"class":156},"\u002F\u002F [3, 4, 5]\n",[15,437,438],{},"rest 必须是最后一个形参，得到的值是真正的数组。",[440,441,443],"h3",{"id":442},"严格模式与-name","严格模式与 name",[15,445,446,447,450],{},"参数列表包含默认值、解构或 rest 时，不能在函数体中再写独立的 ",[33,448,449],{},"'use strict'"," 指令。可以在外层脚本启用严格模式，ES Module 则默认严格。",[53,452,454],{"className":55,"code":453,"language":57,"meta":58,"style":58},"'use strict';\nfunction sum(a = 1, b = 2) { return a + b; }\nconsole.log(sum.name, sum()); \u002F\u002F sum 3\n",[33,455,456,464,496],{"__ignoreMap":58},[62,457,458,461],{"class":64,"line":65},[62,459,449],{"class":460},"sZZnC",[62,462,463],{"class":76},";\n",[62,465,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494],{"class":64,"line":116},[62,467,69],{"class":68},[62,469,73],{"class":72},[62,471,77],{"class":76},[62,473,19],{"class":80},[62,475,83],{"class":68},[62,477,87],{"class":86},[62,479,90],{"class":76},[62,481,93],{"class":80},[62,483,83],{"class":68},[62,485,232],{"class":86},[62,487,101],{"class":76},[62,489,104],{"class":68},[62,491,107],{"class":76},[62,493,110],{"class":68},[62,495,113],{"class":76},[62,497,498,500,502,505,507,510],{"class":64,"line":160},[62,499,119],{"class":76},[62,501,122],{"class":72},[62,503,504],{"class":76},"(sum.name, ",[62,506,127],{"class":72},[62,508,509],{"class":76},"()); ",[62,511,512],{"class":156},"\u002F\u002F sum 3\n",[15,514,515,518],{},[33,516,517],{},"name"," 可辅助调试，但不宜作为业务标识：它可能被推断、绑定或构建压缩改变。",[25,520,521],{"id":521},"箭头函数",[53,523,525],{"className":55,"code":524,"language":57,"meta":58,"style":58},"const double = value => value * 2;\nconst add = (a, b) => a + b;\nconst user = name => ({ name });\nconsole.log(double(3), add(1, 2), user('kevin').name); \u002F\u002F 6 3 kevin\n",[33,526,527,553,583,600],{"__ignoreMap":58},[62,528,529,532,535,537,540,543,546,549,551],{"class":64,"line":65},[62,530,531],{"class":68},"const",[62,533,534],{"class":72}," double",[62,536,83],{"class":68},[62,538,539],{"class":80}," value",[62,541,542],{"class":68}," =>",[62,544,545],{"class":76}," value ",[62,547,548],{"class":68},"*",[62,550,232],{"class":86},[62,552,463],{"class":76},[62,554,555,557,560,562,565,567,569,571,574,577,579,581],{"class":64,"line":116},[62,556,531],{"class":68},[62,558,559],{"class":72}," add",[62,561,83],{"class":68},[62,563,564],{"class":76}," (",[62,566,19],{"class":80},[62,568,90],{"class":76},[62,570,93],{"class":80},[62,572,573],{"class":76},") ",[62,575,576],{"class":68},"=>",[62,578,107],{"class":76},[62,580,110],{"class":68},[62,582,237],{"class":76},[62,584,585,587,590,592,595,597],{"class":64,"line":160},[62,586,531],{"class":68},[62,588,589],{"class":72}," user",[62,591,83],{"class":68},[62,593,594],{"class":80}," name",[62,596,542],{"class":68},[62,598,599],{"class":76}," ({ name });\n",[62,601,602,604,606,608,611,613,615,617,620,622,624,626,628,630,633,635,638,641],{"class":64,"line":167},[62,603,119],{"class":76},[62,605,122],{"class":72},[62,607,77],{"class":76},[62,609,610],{"class":72},"double",[62,612,77],{"class":76},[62,614,346],{"class":86},[62,616,140],{"class":76},[62,618,619],{"class":72},"add",[62,621,77],{"class":76},[62,623,272],{"class":86},[62,625,90],{"class":76},[62,627,137],{"class":86},[62,629,140],{"class":76},[62,631,632],{"class":72},"user",[62,634,77],{"class":76},[62,636,637],{"class":460},"'kevin'",[62,639,640],{"class":76},").name); ",[62,642,643],{"class":156},"\u002F\u002F 6 3 kevin\n",[15,645,646,647,649],{},"表达式体隐式返回；语句块体需要显式 ",[33,648,104],{},"。返回对象字面量时加括号，避免被解析为语句块。",[440,651,653],{"id":652},"this-来自外层作用域","this 来自外层作用域",[15,655,656,657,660,661,40,664,40,667,670,671,23],{},"箭头函数没有自己的 ",[33,658,659],{},"this","，",[33,662,663],{},"call",[33,665,666],{},"apply",[33,668,669],{},"bind"," 不能替换它捕获的外层 ",[33,672,659],{},[53,674,676],{"className":55,"code":675,"language":57,"meta":58,"style":58},"function makeReader() {\n  return () => this.name;\n}\nconst read = makeReader.call({ name: 'kevin' });\nconsole.log(read()); \u002F\u002F kevin\nconsole.log(read.call({ name: 'lily' })); \u002F\u002F kevin\n",[33,677,678,688,703,707,729,745],{"__ignoreMap":58},[62,679,680,682,685],{"class":64,"line":65},[62,681,69],{"class":68},[62,683,684],{"class":72}," makeReader",[62,686,687],{"class":76},"() {\n",[62,689,690,692,695,697,700],{"class":64,"line":116},[62,691,243],{"class":68},[62,693,694],{"class":76}," () ",[62,696,576],{"class":68},[62,698,699],{"class":86}," this",[62,701,702],{"class":76},".name;\n",[62,704,705],{"class":64,"line":160},[62,706,255],{"class":76},[62,708,709,711,714,716,719,721,724,726],{"class":64,"line":167},[62,710,531],{"class":68},[62,712,713],{"class":86}," read",[62,715,83],{"class":68},[62,717,718],{"class":76}," makeReader.",[62,720,663],{"class":72},[62,722,723],{"class":76},"({ name: ",[62,725,637],{"class":460},[62,727,728],{"class":76}," });\n",[62,730,731,733,735,737,740,742],{"class":64,"line":186},[62,732,119],{"class":76},[62,734,122],{"class":72},[62,736,77],{"class":76},[62,738,739],{"class":72},"read",[62,741,509],{"class":76},[62,743,744],{"class":156},"\u002F\u002F kevin\n",[62,746,747,749,751,754,756,758,761,763],{"class":64,"line":215},[62,748,119],{"class":76},[62,750,122],{"class":72},[62,752,753],{"class":76},"(read.",[62,755,663],{"class":72},[62,757,723],{"class":76},[62,759,760],{"class":460},"'lily'",[62,762,355],{"class":76},[62,764,744],{"class":156},[15,766,767,768,770,771,23],{},"普通对象方法的 ",[33,769,659],{}," 取决于调用方式。把它取出来单独调用，接收者会丢失；在严格模式下通常表现为 ",[33,772,773],{},"this === undefined",[15,775,776,777,780,781,784,785,787],{},"箭头函数不能通过 ",[33,778,779],{},"new"," 构造，没有自己的 ",[33,782,783],{},"arguments","，也不能声明为 Generator。需要任意数量的参数时用 rest；箭头函数中访问到的 ",[33,786,783],{}," 若存在，来自外层普通函数。",[25,789,791],{"id":790},"class-与原型方法","Class 与原型方法",[15,793,794,795,797],{},"Class 基于 JavaScript 原型机制，提供更清晰的构造、方法与继承语法，同时有严格模式、必须用 ",[33,796,779],{}," 等规则。",[53,799,801],{"className":55,"code":800,"language":57,"meta":58,"style":58},"class Person {\n  constructor(name) { this.name = name; }\n  say() { return `我叫${this.name}`; }\n  get uname() { return this.name; }\n  set uname(value) { this.name = value; }\n  static kind() { return 'Person'; }\n}\nconst person = new Person('小明');\nperson.uname = 'xiaoming';\nconsole.log(person.say(), person.uname); \u002F\u002F 我叫xiaoming xiaoming\nconsole.log(Person.kind()); \u002F\u002F Person\nconsole.log(Object.keys(Person.prototype)); \u002F\u002F []\nconsole.log(Object.getOwnPropertyNames(Person.prototype)); \u002F\u002F ['constructor', 'say', 'uname']\n",[33,802,803,814,835,861,878,901,918,922,944,956,974,991,1018],{"__ignoreMap":58},[62,804,805,808,811],{"class":64,"line":65},[62,806,807],{"class":68},"class",[62,809,810],{"class":72}," Person",[62,812,813],{"class":76}," {\n",[62,815,816,819,821,823,825,827,830,832],{"class":64,"line":116},[62,817,818],{"class":68},"  constructor",[62,820,77],{"class":76},[62,822,517],{"class":80},[62,824,101],{"class":76},[62,826,659],{"class":86},[62,828,829],{"class":76},".name ",[62,831,192],{"class":68},[62,833,834],{"class":76}," name; }\n",[62,836,837,840,843,845,848,850,853,855,858],{"class":64,"line":160},[62,838,839],{"class":72},"  say",[62,841,842],{"class":76},"() { ",[62,844,104],{"class":68},[62,846,847],{"class":460}," `我叫${",[62,849,659],{"class":86},[62,851,852],{"class":460},".",[62,854,517],{"class":76},[62,856,857],{"class":460},"}`",[62,859,860],{"class":76},"; }\n",[62,862,863,866,869,871,873,875],{"class":64,"line":167},[62,864,865],{"class":68},"  get",[62,867,868],{"class":72}," uname",[62,870,842],{"class":76},[62,872,104],{"class":68},[62,874,699],{"class":86},[62,876,877],{"class":76},".name; }\n",[62,879,880,883,885,887,890,892,894,896,898],{"class":64,"line":186},[62,881,882],{"class":68},"  set",[62,884,868],{"class":72},[62,886,77],{"class":76},[62,888,889],{"class":80},"value",[62,891,101],{"class":76},[62,893,659],{"class":86},[62,895,829],{"class":76},[62,897,192],{"class":68},[62,899,900],{"class":76}," value; }\n",[62,902,903,906,909,911,913,916],{"class":64,"line":215},[62,904,905],{"class":68},"  static",[62,907,908],{"class":72}," kind",[62,910,842],{"class":76},[62,912,104],{"class":68},[62,914,915],{"class":460}," 'Person'",[62,917,860],{"class":76},[62,919,920],{"class":64,"line":240},[62,921,255],{"class":76},[62,923,924,926,929,931,934,936,938,941],{"class":64,"line":252},[62,925,531],{"class":68},[62,927,928],{"class":86}," person",[62,930,83],{"class":68},[62,932,933],{"class":68}," new",[62,935,810],{"class":72},[62,937,77],{"class":76},[62,939,940],{"class":460},"'小明'",[62,942,943],{"class":76},");\n",[62,945,946,949,951,954],{"class":64,"line":258},[62,947,948],{"class":76},"person.uname ",[62,950,192],{"class":68},[62,952,953],{"class":460}," 'xiaoming'",[62,955,463],{"class":76},[62,957,958,960,962,965,968,971],{"class":64,"line":284},[62,959,119],{"class":76},[62,961,122],{"class":72},[62,963,964],{"class":76},"(person.",[62,966,967],{"class":72},"say",[62,969,970],{"class":76},"(), person.uname); ",[62,972,973],{"class":156},"\u002F\u002F 我叫xiaoming xiaoming\n",[62,975,976,978,980,983,986,988],{"class":64,"line":289},[62,977,119],{"class":76},[62,979,122],{"class":72},[62,981,982],{"class":76},"(Person.",[62,984,985],{"class":72},"kind",[62,987,509],{"class":76},[62,989,990],{"class":156},"\u002F\u002F Person\n",[62,992,993,995,997,1000,1003,1005,1008,1010,1013,1015],{"class":64,"line":331},[62,994,119],{"class":76},[62,996,122],{"class":72},[62,998,999],{"class":76},"(Object.",[62,1001,1002],{"class":72},"keys",[62,1004,77],{"class":76},[62,1006,1007],{"class":86},"Person",[62,1009,852],{"class":76},[62,1011,1012],{"class":86},"prototype",[62,1014,153],{"class":76},[62,1016,1017],{"class":156},"\u002F\u002F []\n",[62,1019,1020,1022,1024,1026,1029,1031,1033,1035,1037,1039],{"class":64,"line":361},[62,1021,119],{"class":76},[62,1023,122],{"class":72},[62,1025,999],{"class":76},[62,1027,1028],{"class":72},"getOwnPropertyNames",[62,1030,77],{"class":76},[62,1032,1007],{"class":86},[62,1034,852],{"class":76},[62,1036,1012],{"class":86},[62,1038,153],{"class":76},[62,1040,1041],{"class":156},"\u002F\u002F ['constructor', 'say', 'uname']\n",[15,1043,1044,1047,1048,1050],{},[33,1045,1046],{},"say()"," 和访问器定义在原型上，且不可枚举。静态方法定义在类本身，实例不能直接调用；通过类调用静态方法时，",[33,1049,659],{}," 指向调用它的类。",[440,1052,1053],{"id":1053},"保留方法接收者",[15,1055,1056],{},"可以在构造器中绑定方法，也可以使用箭头函数实例字段。",[53,1058,1060],{"className":55,"code":1059,"language":57,"meta":58,"style":58},"class BoundPerson {\n  constructor(name) {\n    this.name = name;\n    this.say = this.say.bind(this);\n  }\n  say() { return this.name; }\n}\nconst { say } = new BoundPerson('小明');\nconsole.log(say()); \u002F\u002F 小明\n",[33,1061,1062,1071,1081,1093,1115,1120,1132,1136,1159],{"__ignoreMap":58},[62,1063,1064,1066,1069],{"class":64,"line":65},[62,1065,807],{"class":68},[62,1067,1068],{"class":72}," BoundPerson",[62,1070,813],{"class":76},[62,1072,1073,1075,1077,1079],{"class":64,"line":116},[62,1074,818],{"class":68},[62,1076,77],{"class":76},[62,1078,517],{"class":80},[62,1080,183],{"class":76},[62,1082,1083,1086,1088,1090],{"class":64,"line":160},[62,1084,1085],{"class":86},"    this",[62,1087,829],{"class":76},[62,1089,192],{"class":68},[62,1091,1092],{"class":76}," name;\n",[62,1094,1095,1097,1100,1102,1104,1107,1109,1111,1113],{"class":64,"line":167},[62,1096,1085],{"class":86},[62,1098,1099],{"class":76},".say ",[62,1101,192],{"class":68},[62,1103,699],{"class":86},[62,1105,1106],{"class":76},".say.",[62,1108,669],{"class":72},[62,1110,77],{"class":76},[62,1112,659],{"class":86},[62,1114,943],{"class":76},[62,1116,1117],{"class":64,"line":186},[62,1118,1119],{"class":76},"  }\n",[62,1121,1122,1124,1126,1128,1130],{"class":64,"line":215},[62,1123,839],{"class":72},[62,1125,842],{"class":76},[62,1127,104],{"class":68},[62,1129,699],{"class":86},[62,1131,877],{"class":76},[62,1133,1134],{"class":64,"line":240},[62,1135,255],{"class":76},[62,1137,1138,1140,1143,1145,1147,1149,1151,1153,1155,1157],{"class":64,"line":252},[62,1139,531],{"class":68},[62,1141,1142],{"class":76}," { ",[62,1144,967],{"class":86},[62,1146,315],{"class":76},[62,1148,192],{"class":68},[62,1150,933],{"class":68},[62,1152,1068],{"class":72},[62,1154,77],{"class":76},[62,1156,940],{"class":460},[62,1158,943],{"class":76},[62,1160,1161,1163,1165,1167,1169,1171],{"class":64,"line":258},[62,1162,119],{"class":76},[62,1164,122],{"class":72},[62,1166,77],{"class":76},[62,1168,967],{"class":72},[62,1170,509],{"class":76},[62,1172,1173],{"class":156},"\u002F\u002F 小明\n",[53,1175,1177],{"className":55,"code":1176,"language":57,"meta":58,"style":58},"class FieldPerson {\n  constructor(name) { this.name = name; }\n  say = () => this.name;\n}\nconst person = new FieldPerson('lily');\nconst { say } = person;\nconsole.log(say()); \u002F\u002F lily\nconsole.log(Object.keys(person)); \u002F\u002F ['say', 'name']\nconsole.log(Object.prototype.hasOwnProperty.call(person, 'say')); \u002F\u002F true\n",[33,1178,1179,1188,1206,1220,1224,1242,1257,1272,1288],{"__ignoreMap":58},[62,1180,1181,1183,1186],{"class":64,"line":65},[62,1182,807],{"class":68},[62,1184,1185],{"class":72}," FieldPerson",[62,1187,813],{"class":76},[62,1189,1190,1192,1194,1196,1198,1200,1202,1204],{"class":64,"line":116},[62,1191,818],{"class":68},[62,1193,77],{"class":76},[62,1195,517],{"class":80},[62,1197,101],{"class":76},[62,1199,659],{"class":86},[62,1201,829],{"class":76},[62,1203,192],{"class":68},[62,1205,834],{"class":76},[62,1207,1208,1210,1212,1214,1216,1218],{"class":64,"line":160},[62,1209,839],{"class":72},[62,1211,83],{"class":68},[62,1213,694],{"class":76},[62,1215,576],{"class":68},[62,1217,699],{"class":86},[62,1219,702],{"class":76},[62,1221,1222],{"class":64,"line":167},[62,1223,255],{"class":76},[62,1225,1226,1228,1230,1232,1234,1236,1238,1240],{"class":64,"line":186},[62,1227,531],{"class":68},[62,1229,928],{"class":86},[62,1231,83],{"class":68},[62,1233,933],{"class":68},[62,1235,1185],{"class":72},[62,1237,77],{"class":76},[62,1239,760],{"class":460},[62,1241,943],{"class":76},[62,1243,1244,1246,1248,1250,1252,1254],{"class":64,"line":215},[62,1245,531],{"class":68},[62,1247,1142],{"class":76},[62,1249,967],{"class":86},[62,1251,315],{"class":76},[62,1253,192],{"class":68},[62,1255,1256],{"class":76}," person;\n",[62,1258,1259,1261,1263,1265,1267,1269],{"class":64,"line":240},[62,1260,119],{"class":76},[62,1262,122],{"class":72},[62,1264,77],{"class":76},[62,1266,967],{"class":72},[62,1268,509],{"class":76},[62,1270,1271],{"class":156},"\u002F\u002F lily\n",[62,1273,1274,1276,1278,1280,1282,1285],{"class":64,"line":252},[62,1275,119],{"class":76},[62,1277,122],{"class":72},[62,1279,999],{"class":76},[62,1281,1002],{"class":72},[62,1283,1284],{"class":76},"(person)); ",[62,1286,1287],{"class":156},"\u002F\u002F ['say', 'name']\n",[62,1289,1290,1292,1294,1296,1299,1301,1303,1306,1308,1311,1314,1316],{"class":64,"line":258},[62,1291,119],{"class":76},[62,1293,122],{"class":72},[62,1295,77],{"class":76},[62,1297,1298],{"class":86},"Object",[62,1300,852],{"class":76},[62,1302,1012],{"class":86},[62,1304,1305],{"class":76},".hasOwnProperty.",[62,1307,663],{"class":72},[62,1309,1310],{"class":76},"(person, ",[62,1312,1313],{"class":460},"'say'",[62,1315,153],{"class":76},[62,1317,1318],{"class":156},"\u002F\u002F true\n",[15,1320,1321],{},"类字段属于 ES2022。箭头函数字段是每个实例自己的可枚举属性，并不是原型上的共享方法。因此原笔记“类中所有方法都不可枚举”只适合描述方法定义，不能套用到函数字段。",[25,1323,1325],{"id":1324},"extends-与-super","extends 与 super",[53,1327,1329],{"className":55,"code":1328,"language":57,"meta":58,"style":58},"class Bird {\n  constructor(wings, legs) {\n    this.wings = wings;\n    this.legs = legs;\n  }\n  fly() { return '会飞'; }\n}\nclass Sparrow extends Bird {\n  constructor(name) {\n    super(2, 2);\n    this.name = name;\n  }\n  jump() { return `${this.legs}条腿会跳`; }\n}\nconst lily = new Sparrow('lily');\nconsole.log(lily.fly(), lily.jump()); \u002F\u002F 会飞 2条腿会跳\nconsole.log(lily instanceof Bird); \u002F\u002F true\n",[33,1330,1331,1340,1356,1368,1380,1384,1398,1402,1416,1426,1441,1451,1455,1478,1482,1501,1525],{"__ignoreMap":58},[62,1332,1333,1335,1338],{"class":64,"line":65},[62,1334,807],{"class":68},[62,1336,1337],{"class":72}," Bird",[62,1339,813],{"class":76},[62,1341,1342,1344,1346,1349,1351,1354],{"class":64,"line":116},[62,1343,818],{"class":68},[62,1345,77],{"class":76},[62,1347,1348],{"class":80},"wings",[62,1350,90],{"class":76},[62,1352,1353],{"class":80},"legs",[62,1355,183],{"class":76},[62,1357,1358,1360,1363,1365],{"class":64,"line":160},[62,1359,1085],{"class":86},[62,1361,1362],{"class":76},".wings ",[62,1364,192],{"class":68},[62,1366,1367],{"class":76}," wings;\n",[62,1369,1370,1372,1375,1377],{"class":64,"line":167},[62,1371,1085],{"class":86},[62,1373,1374],{"class":76},".legs ",[62,1376,192],{"class":68},[62,1378,1379],{"class":76}," legs;\n",[62,1381,1382],{"class":64,"line":186},[62,1383,1119],{"class":76},[62,1385,1386,1389,1391,1393,1396],{"class":64,"line":215},[62,1387,1388],{"class":72},"  fly",[62,1390,842],{"class":76},[62,1392,104],{"class":68},[62,1394,1395],{"class":460}," '会飞'",[62,1397,860],{"class":76},[62,1399,1400],{"class":64,"line":240},[62,1401,255],{"class":76},[62,1403,1404,1406,1409,1412,1414],{"class":64,"line":252},[62,1405,807],{"class":68},[62,1407,1408],{"class":72}," Sparrow",[62,1410,1411],{"class":68}," extends",[62,1413,1337],{"class":72},[62,1415,813],{"class":76},[62,1417,1418,1420,1422,1424],{"class":64,"line":258},[62,1419,818],{"class":68},[62,1421,77],{"class":76},[62,1423,517],{"class":80},[62,1425,183],{"class":76},[62,1427,1428,1431,1433,1435,1437,1439],{"class":64,"line":284},[62,1429,1430],{"class":86},"    super",[62,1432,77],{"class":76},[62,1434,137],{"class":86},[62,1436,90],{"class":76},[62,1438,137],{"class":86},[62,1440,943],{"class":76},[62,1442,1443,1445,1447,1449],{"class":64,"line":289},[62,1444,1085],{"class":86},[62,1446,829],{"class":76},[62,1448,192],{"class":68},[62,1450,1092],{"class":76},[62,1452,1453],{"class":64,"line":331},[62,1454,1119],{"class":76},[62,1456,1457,1460,1462,1464,1467,1469,1471,1473,1476],{"class":64,"line":361},[62,1458,1459],{"class":72},"  jump",[62,1461,842],{"class":76},[62,1463,104],{"class":68},[62,1465,1466],{"class":460}," `${",[62,1468,659],{"class":86},[62,1470,852],{"class":460},[62,1472,1353],{"class":76},[62,1474,1475],{"class":460},"}条腿会跳`",[62,1477,860],{"class":76},[62,1479,1480],{"class":64,"line":366},[62,1481,255],{"class":76},[62,1483,1484,1486,1489,1491,1493,1495,1497,1499],{"class":64,"line":399},[62,1485,531],{"class":68},[62,1487,1488],{"class":86}," lily",[62,1490,83],{"class":68},[62,1492,933],{"class":68},[62,1494,1408],{"class":72},[62,1496,77],{"class":76},[62,1498,760],{"class":460},[62,1500,943],{"class":76},[62,1502,1504,1506,1508,1511,1514,1517,1520,1522],{"class":64,"line":1503},16,[62,1505,119],{"class":76},[62,1507,122],{"class":72},[62,1509,1510],{"class":76},"(lily.",[62,1512,1513],{"class":72},"fly",[62,1515,1516],{"class":76},"(), lily.",[62,1518,1519],{"class":72},"jump",[62,1521,509],{"class":76},[62,1523,1524],{"class":156},"\u002F\u002F 会飞 2条腿会跳\n",[62,1526,1528,1530,1532,1535,1538,1540,1543],{"class":64,"line":1527},17,[62,1529,119],{"class":76},[62,1531,122],{"class":72},[62,1533,1534],{"class":76},"(lily ",[62,1536,1537],{"class":68},"instanceof",[62,1539,1337],{"class":72},[62,1541,1542],{"class":76},"); ",[62,1544,1318],{"class":156},[15,1546,1547,1548,1551,1552,1554,1555,1558],{},"通常在派生构造器中先调用 ",[33,1549,1550],{},"super()","，再访问 ",[33,1553,659],{},"；未显式写派生构造器时，默认构造器会转发参数。类方法中可用 ",[33,1556,1557],{},"super.method()"," 调用父类方法。",[25,1560,1562],{"id":1561},"function-构造器与字符串","Function 构造器与字符串",[15,1564,1565,1568,1569,1572,1573,1576],{},[33,1566,1567],{},"006_webpack\u002Fcode\u002F01_gulp\u002Fes6\u002F06_newFunction.js"," 尝试把 ",[33,1570,1571],{},"\u003Cdiv>容器\u003C\u002Fdiv>"," 直接传给 ",[33,1574,1575],{},"new Function","，它不是 JavaScript 函数体，会产生语法错误。若只是想返回 HTML 字符串，普通函数或模板字符串即可。",[53,1578,1580],{"className":55,"code":1579,"language":57,"meta":58,"style":58},"const makeMarkup = () => '\u003Cdiv>容器\u003C\u002Fdiv>';\nconsole.log(makeMarkup()); \u002F\u002F \u003Cdiv>容器\u003C\u002Fdiv>\n\nconst add = new Function('a', 'b', 'return a + b;');\nconsole.log(add(1, 2)); \u002F\u002F 3\n",[33,1581,1582,1600,1616,1620,1650],{"__ignoreMap":58},[62,1583,1584,1586,1589,1591,1593,1595,1598],{"class":64,"line":65},[62,1585,531],{"class":68},[62,1587,1588],{"class":72}," makeMarkup",[62,1590,83],{"class":68},[62,1592,694],{"class":76},[62,1594,576],{"class":68},[62,1596,1597],{"class":460}," '\u003Cdiv>容器\u003C\u002Fdiv>'",[62,1599,463],{"class":76},[62,1601,1602,1604,1606,1608,1611,1613],{"class":64,"line":116},[62,1603,119],{"class":76},[62,1605,122],{"class":72},[62,1607,77],{"class":76},[62,1609,1610],{"class":72},"makeMarkup",[62,1612,509],{"class":76},[62,1614,1615],{"class":156},"\u002F\u002F \u003Cdiv>容器\u003C\u002Fdiv>\n",[62,1617,1618],{"class":64,"line":160},[62,1619,164],{"emptyLinePlaceholder":163},[62,1621,1622,1624,1626,1628,1630,1633,1635,1638,1640,1643,1645,1648],{"class":64,"line":167},[62,1623,531],{"class":68},[62,1625,559],{"class":86},[62,1627,83],{"class":68},[62,1629,933],{"class":68},[62,1631,1632],{"class":72}," Function",[62,1634,77],{"class":76},[62,1636,1637],{"class":460},"'a'",[62,1639,90],{"class":76},[62,1641,1642],{"class":460},"'b'",[62,1644,90],{"class":76},[62,1646,1647],{"class":460},"'return a + b;'",[62,1649,943],{"class":76},[62,1651,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670],{"class":64,"line":186},[62,1653,119],{"class":76},[62,1655,122],{"class":72},[62,1657,77],{"class":76},[62,1659,619],{"class":72},[62,1661,77],{"class":76},[62,1663,272],{"class":86},[62,1665,90],{"class":76},[62,1667,137],{"class":86},[62,1669,153],{"class":76},[62,1671,1672],{"class":156},"\u002F\u002F 3\n",[15,1674,1675],{},"后一个例子仅说明构造器接受合法 JavaScript 文本；不要把用户输入传给它。它不捕获当前局部词法作用域，通常也不需要用来生成页面内容。",[25,1677,1678],{"id":1678},"来源记录",[1680,1681,1682,1698,1708,1713],"ul",{},[1683,1684,1685,40,1688,40,1691,40,1694,1697],"li",{},[33,1686,1687],{},"004_es6\u002Fcode\u002F02_function.js",[33,1689,1690],{},"03_function.js",[33,1692,1693],{},"04_class.js",[33,1695,1696],{},"05_class.js"," 及 README 对应章节。",[1683,1699,1700,40,1703,40,1705,1707],{},[33,1701,1702],{},"006_webpack\u002Fcode\u002F01_gulp\u002Fes6\u002F02_function.js",[33,1704,1690],{},[33,1706,1696],{},"：同内容合并。",[1683,1709,1710,1712],{},[33,1711,1567],{},"：保留错误原因和修正示例。",[1683,1714,1715,40,1718,1721,1722,1724,1725,1727,1728,23],{},[33,1716,1717],{},"002_es6\u002Fcode\u002Fes6\u002F01_useBabel.js",[33,1719,1720],{},"007_webpack\u002Fcode\u002Fsrc\u002Fmain.js"," 中的 Class 示例：归并；后者 ",[33,1723,1046],{}," 中的 ",[33,1726,517],{}," 修正为 ",[33,1729,1730],{},"this.name",[1732,1733,1734],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":58,"searchDepth":160,"depth":160,"links":1736},[1737,1740,1743,1746,1747,1748],{"id":27,"depth":116,"text":28,"children":1738},[1739],{"id":442,"depth":160,"text":443},{"id":521,"depth":116,"text":521,"children":1741},[1742],{"id":652,"depth":160,"text":653},{"id":790,"depth":116,"text":791,"children":1744},[1745],{"id":1053,"depth":160,"text":1053},{"id":1324,"depth":116,"text":1325},{"id":1561,"depth":116,"text":1562},{"id":1678,"depth":116,"text":1678},"fundamentals","2023-04-26","默认参数、rest、箭头函数的 this、Class 方法、访问器、静态成员与继承。",false,"md",{},"\u002Fdocs\u002Fes6-functions-classes",{"title":5,"description":1751},"尚学堂 ES6 课程 004_es6、006_webpack 学习笔记与代码","docs\u002Fes6-functions-classes",[1760,1761,1762],"javascript","es6","notes","YPanCnO6OZHR87IW7myKNE7-Y4hYKZZtlopuQ397mGs",[1765,1773,1778,1782,1787,1796,1807,1814,1820,1830,1837,1846,1851,1858,1863,1869,1875,1882,1889,1896,1905,1911,1917,1919,1924,1929,1934,1939],{"path":1766,"title":1767,"description":1768,"date":1769,"category":1770,"tags":1771},"\u002Fdocs\u002Fbabel-basics","Babel 转译基础与构建集成","Babel 7 的 CLI、preset、plugin、目标环境以及 Gulp、Webpack 和 JSX 转译配置摘录。","2026-09-09","toolchain",[1760,1761,1772,1762],"webpack",{"path":1774,"title":1775,"description":1776,"date":1769,"category":1749,"tags":1777},"\u002Fdocs\u002Fes6-arrays-objects","ES6 数组与对象扩展","展开运算符、Array.from、Object.assign、属性描述符与图片预加载示例。",[1760,1761,1762],{"path":21,"title":1779,"description":1780,"date":1769,"category":1749,"tags":1781},"ES6 基础：作用域、解构与模板字符串","从课程示例整理 let、const、暂时性死区、全局对象、数组与对象解构及模板字符串。",[1760,1761,1762],{"path":1783,"title":1784,"description":1785,"date":1769,"category":1749,"tags":1786},"\u002Fdocs\u002Fjs-promise-async","Promise、Generator 与 async\u002Fawait","从回调到 Promise 链、组合方法、Generator 执行与 async 错误处理的课程示例整理。",[1760,1761,1762],{"path":1788,"title":1789,"description":1790,"date":1791,"category":1770,"tags":1792},"\u002Fdocs\u002Flinux-commands-cheatsheet","Linux 常用命令与权限管理速查","cp\u002Fmv\u002Frm、目录导航、查找、压缩、网络等基础命令速查，以及 chmod\u002Fchown 的数字与符号写法、常用组合和 WSL 下的坑。","2026-05-28",[1793,1794,1795],"linux","wsl2","cheatsheet",{"path":1797,"title":1798,"description":1799,"date":1800,"category":1801,"tags":1802},"\u002Fdocs\u002Ffrontend-coding-standards","前端团队编码规范","HTML \u002F CSS \u002F JavaScript 三端统一的团队编码约定，含缩进、命名、语法与禁用项，可直接作为 Code Review 依据。","2025-12-17","standards",[1803,1804,1760,1761,1805,1806],"html","css","best-practice","guide",{"path":1808,"title":1809,"description":1810,"date":1811,"category":1770,"tags":1812},"\u002Fdocs\u002Fwindows-mklink","Windows mklink 符号链接用法","mklink 各参数区别与实用场景：目录联接、符号链接与硬链接的选择。","2024-12-18",[1813,1795],"windows",{"path":1815,"title":1816,"description":1817,"date":1818,"category":1770,"tags":1819},"\u002Fdocs\u002Frandom-color-utils","JS 随机颜色生成方法","几种生成随机 RGB \u002F HEX 颜色的实现方式与各自适用场景。","2024-12-11",[1760,1795],{"path":1821,"title":1822,"description":1823,"date":1824,"category":1825,"tags":1826},"\u002Fdocs\u002Fcanvas-vs-svg","Canvas 与 SVG 绘图方案选型","对比 Canvas 与 SVG 两种绘图方案的优缺点与适用场景，给出选型判断依据。","2024-12-09","visualization",[1827,1828,1829,1805],"canvas","svg","performance",{"path":1831,"title":1832,"description":1833,"date":1834,"category":1770,"tags":1835},"\u002Fdocs\u002Ffree-commercial-fonts","免费可商用字体整理","整理思源黑体、思源宋体等可商用中文字体，规避字体版权风险。","2024-11-03",[1836,1804,1762],"font",{"path":1838,"title":1839,"description":1840,"date":1834,"category":1841,"tags":1842},"\u002Fdocs\u002Finterview-browser-network","浏览器与网络考点","从输入 URL 到页面呈现的完整链路，涵盖渲染流程、回流重绘、HTTP 报文与状态码、跨域同源策略与常见攻击方式。","interview",[1843,1844,1845,1829,1762],"browser","http","network",{"path":1847,"title":1848,"description":1849,"date":1834,"category":1841,"tags":1850},"\u002Fdocs\u002Finterview-css-layout","CSS 与布局考点","em 与 rem 的区别、移动端三种适配方案对比、viewport 标准设置与 REM 布局的媒体查询实现。",[1804,1803,1805,1762],{"path":1852,"title":1853,"description":1854,"date":1834,"category":1841,"tags":1855},"\u002Fdocs\u002Finterview-framework-tooling","框架与工程化考点","React diff 与 setState 机制、Redux 核心组成、Vue 常考清单，以及 Webpack、Vite、Git 的面试要点。",[1856,1760,1772,1857,1762],"vue","vite",{"path":1859,"title":1860,"description":1861,"date":1834,"category":1841,"tags":1862},"\u002Fdocs\u002Finterview-javascript-core","JavaScript 核心考点","数据类型、this 绑定、闭包、原型链、异步与数组方法，前端面试中 JS 部分的高频考点与代码示例。",[1760,1761,1762],{"path":1864,"title":1865,"description":1866,"date":1834,"category":1749,"tags":1867},"\u002Fdocs\u002Fjs-module-systems","JavaScript 模块化方案","梳理 CommonJS、AMD、ES Module 等模块化方案的差异与使用方式。",[1760,1868,1761,1762],"module-system",{"path":1870,"title":1871,"description":1872,"date":1834,"category":1749,"tags":1873},"\u002Fdocs\u002Fwebsocket-basics","WebSocket 基础","WebSocket 全双工通信协议的事件、方法与基本用法整理。",[1874,1845,1760,1762],"websocket",{"path":1876,"title":1877,"description":1878,"date":1879,"category":1770,"tags":1880},"\u002Fdocs\u002Fmarkdown-syntax","Markdown 语法速查","Markdown 标题、强调、列表、区块引用、代码、表格、转义与 Mermaid 图表语法整理。","2024-10-18",[1881,1795,1762],"markdown",{"path":1883,"title":1884,"description":1885,"date":1886,"category":1825,"tags":1887},"\u002Fdocs\u002Fgojs-getting-started","GoJS 入门实战","从引入方式、画布初始化到节点模板与数据绑定，一份可直接上手的 GoJS 流程图开发笔记。","2024-08-22",[1888,1760,1762],"gojs",{"path":1890,"title":1891,"description":1892,"date":1893,"category":1825,"tags":1894},"\u002Fdocs\u002Fecharts-options-notes","ECharts 配置项速查","整理 ECharts 常用 option 配置：数据格式、坐标轴、图例与交互项的实际用法。","2024-08-09",[1895,1760,1795],"echarts",{"path":1897,"title":1898,"description":1899,"date":1900,"category":1770,"tags":1901},"\u002Fdocs\u002Fyarn-npm-install-errors","yarn \u002F npm 安装报错处理","yarn 引擎版本不兼容时的 ignore-engines 绕过、Windows 刷新 DNS 解析缓存、npm 缓存清理与校验。","2024-08-06",[1902,1903,1813,1904],"npm","nodejs","troubleshooting",{"path":1906,"title":1907,"description":1908,"date":1909,"category":1825,"tags":1910},"\u002Fdocs\u002Fgojs-grid-panel","GoJS 网格面板用法","Diagram.grid 默认网格与网格捕捉、单元格尺寸定制，用 LineH\u002FLineV\u002FBarH\u002FBarV 自定义网格样式，以及把 Grid 面板当作节点元素使用。","2024-07-01",[1888,1760,1762],{"path":1912,"title":1913,"description":1914,"date":1915,"category":1749,"tags":1916},"\u002Fdocs\u002Fhttp-status-codes","HTTP 响应状态码详解","按 1xx 到 5xx 分类梳理 HTTP 状态码的含义与典型使用场景。","2024-06-27",[1844,1845,1795],{"path":1755,"title":5,"description":1751,"date":1750,"category":1749,"tags":1918},[1760,1761,1762],{"path":1920,"title":1921,"description":1922,"date":1750,"category":1770,"tags":1923},"\u002Fdocs\u002Fgulp-basics","Gulp 4 任务与文件流","Gulp 任务完成信号、串并行组合、文件流、资源处理、分阶段输出和文件监听。",[1760,1903,1762],{"path":1925,"title":1926,"description":1927,"date":1750,"category":1749,"tags":1928},"\u002Fdocs\u002Fjs-proxy-reflect","Proxy 与 Reflect 入门","通过属性读取和赋值示例理解 Proxy、Reflect、receiver 与拦截限制。",[1760,1761,1762],{"path":1930,"title":1931,"description":1932,"date":1750,"category":1770,"tags":1933},"\u002Fdocs\u002Fless-basics","Less 语法与编译笔记","变量、嵌套、混合、extend、导入、内置函数和递归生成列的课程示例。",[1804,1762,1795],{"path":1935,"title":1936,"description":1937,"date":1750,"category":1770,"tags":1938},"\u002Fdocs\u002Fwebpack-basics","Webpack 4 配置与开发服务器笔记","课程中的入口出口、loader、plugin、source map、开发代理以及 React 环境配置片段。",[1772,1760,1903,1762],{"path":1940,"title":1941,"description":1942,"date":1943,"category":1749,"tags":1944},"\u002Fdocs\u002Fhtml-basics","HTML 基础笔记","HTML 语法规范、常用标签、表格、表单、Canvas 入门与 JavaScript 输出方式速查。","2022-06-10",[1803,1762,1795],1789635934193]