# 測試 google blockly 紀錄
### (2022/7/20)
* log time 19:30.
:::success
https://blocklycodelabs.dev/codelabs/getting-started/index.html#5
老實說這邊直接用到了CDN(?),直接引用。
![](https://i.imgur.com/taKUrIa.png)
:::
* log time 19:47
:::info
![](https://i.imgur.com/lm76Aqc.png)
'' 和 " " 搞死人了。
:::
* log 20:00
紀錄下workspace(s),還有button的序列化
```jsx=
function loadWorkspace(button) {
const workspace = Blockly.common.getWorkspace();
if (button.blocklySave) {
Blockly.serialization.workspaces.load(button.blocklySave, workspace);
}
}
```
* log 20:39
![](https://i.imgur.com/4JjfV8Y.png)
##### :+1: 程式碼執行沒問題,要注意的部分還在於API。
---------------------------------------------
* 參考資料
https://blocklycodelabs.dev/codelabs/getting-started/index.html#8
* 範例(可是Blockly的東西還是得看API)
https://github.com/google/blockly-samples
---------------------------------------------
### 這邊是單純測試(2022/7/21)
```typescript=
// 在 cmd 輸入
npm init @vitejs/app my-vue-app --template vue
```
* 卡
### 2022/7/22
* log 09:30
:::info
嘗試語法ing
* 使用 object(prototype)
:::
* 這邊使用上述測試
```jsx=
// if download npm please ctrl + shift + ` in vscode
// and enter node filename.js on your cmd
function testbox(leftcreate, rightcreate){
this.leftcreate = leftcreate;
this.rightcreate = rightcreate;
this.test = null;
}
testbox.prototype.To_Test = function(test){
this.test = test;
}
let abc_1 = new testbox('單純測試', '500');
abc_1.To_Test('這裡原本是null');
// console.log(abc_1);
console.log(abc_1.leftcreate);
console.log(abc_1.rightcreate);
console.log(abc_1.test);
console.log(abc_1.To_Test)
```
* 不可列舉
```javascript=
// if download npm please ctrl + shift + ` in vscode
// and enter node filename.js on your cmd
let o = {x:1, y:2, z:3};
// 不可列舉
o.propertyIsEnumerable("toString");
for (let test in o) {
console.log(test);
}
```
* 回應複製類
```javascript=
// if download npm please ctrl + shift + ` in vscode
// and enter node filename.js on your cmd
let tar = {x : 1};
let test = {y : 2, z : 3};
let o = {...tar, ...test};
console.log(o)
let a = Object.assign({},test, tar);
console.log(a)
for(let p of Object.keys(test)){
tar[p] = test[p];
}
console.log(tar)
```
* ES5 ES6 在小地方省略了 function
```javascript=
let area = {
wid() {return this.height * this.height;},
height: 50
}
console.log(area.wid())
```
* 以下箭頭函式...
* log 10:14
```javascript=
// 無引數
(
function(test) {
console.log(100)
}
)()
```
* 老實說不管第幾次看到都有點邪門
```javascript=
const a = (b, c) => {return b + c};
console.log(a(1, 23))
// 24
const a = (b, c) => b + c;
console.log(a(1, 23))
// 省略 return 好邪教啊....
```
* 堆疊
```jsx=
let test = {
op1 : 1,
op2 : 2,
add(){
this.ans = this.op1 + this.op2;
}
}
test.add()
console.log(test.ans
// 3
// 可是覺得很奇怪,改成
const test = {
op1 : 1,
op2 : 2,
add : () => {
this.ans = this.op1 + this.op2
return this.ans
}
}
console.log(test.add())
// NaN
// 這樣出不來,有點小尷尬,估計是調用的問題。
// p.s. 12:22 (小睡)
```
* log 14:02(重啟)
* 回到繼續調用方針紀錄。
```jsx=
function toFindMaxNumber(fir = -Infinity, ...number){
let maxNumber = fir;
for(let n of number){
if(n > maxNumber){
maxNumber = n;
}
}
return maxNumber;
}
let a = toFindMaxNumber(1, 580, -690, 100)
console.log(a)
// 主要是調用(),然後...的部分為數字的延伸。
// 這點可以注意一下,在調用json或資料庫的時候也能這樣整理。
// log 14:30(沒偷懶),在思考參數和物件上的處理,信我。
```
* arguments 相對來說有點累贅了
```jsx=
function toFindMaxNumber(x){
let maxValue = -Infinity;
for (let i = 0; i < arguments.length; i++){
if(arguments[i] > maxValue){
maxValue = arguments[i];
}
}
return maxValue;
}
let a = toFindMaxNumber(1, 580, -690, 100)
console.log(a)
```
* 陣列
```jsx=
function textList([x, y, ...args], ...rest) {
return [x + y, ...args, ...rest];
}
let a = textList([1, 2, 3, 4], 5, 6)
console.log(a)
```
* log 17:21 剛從外面回來,晚餐去市場一趟,累,再寫點就休息。
* 離譜一點的用法。
```jsx=
const a = [x => x * 100, 50]
let b = a[0](a[1])
console.log(b)
// 簡單來說,傳遞的問題...
// 你a[0]是a[1] * 50,這個看的真的會頭痛。
```
* 這個東西就想成 Array.sort() 去理解,保證彈性極佳。
#### 閉包
```jsx=
(
function test(){
console.log("1111");
}
)();
```
* 區域變數,全域變數問題
```jsx=
let test = (
function(){
let count = 0;
return function(){
return count++
};
}
());
console.log(test());
console.log(test());
// 0
// 1
```
* log 18:51 結束
### 2022/7/23 (剛起床)
* log 14:16
* 早上被抓去爬山.jpg
* 可以看看 getter setter
```jsx=
function tester(n){
return{
get test(){
return n++;
},
set test(a){
if (a > n) n = a;
else throw Error("錯誤")
}
}
}
let c = tester(50);
console.log(c.test)
console.log(c.test)
c.test = 1000;
console.log(c.test)
console.log(c.test)
c.test = 1000
console.log(c.test)
// 50
// 51
// 1000
// 1001
// C:\Users\a9132\Desktop\測試\1.js:8
// else throw Error("錯誤")
// ^
// Error: 錯誤
```
* log 14:55
* closures(閉包太複雜了)...
```jsx=
// 共享私有變數的存取權(當然也可以多個)
function test(a){
return () => a;
}
let testfunc = []
for (let i = 0; i < 10; i++) testfunc[i] = test(i)
console.log(testfunc[6]())
// 6
```
* function 建構器
```jsx=
const a = new Function("x", "y", "return x + y;");
console.log(a(4, 10));
// 不過還是直接寫會比較方便許多
const b = function(x, y){return x + y};
console.log(b(4, 15));
// 繼續
const c = (a, b) => {return a + b};
console.log(c(10, 20))
// 最後還是回到了箭頭函式
```
* log 15:07 (休息一下,wait)
* log 15:57
* 高階函式看的頭痛
```jsx=
function test(k){
return function(...args){
let ans = k.apply(this, args);
return !ans
}
}
const even = x => x % 2 === 0;
const odd = test(even)
let a = [1, 3, 5, 7, 9]
console.log(a.every(odd))
// 完全沒理解,哭死。
// log 16:06 嘗試理解中
```
* log 16:11
* 直接跳了,bind, apply先跳過
* node 模組的引用與匯入匯出就不寫了,export, extend, import...
```jsx=
import {test, test_1, test_2} form "../../state.js"
const express =
//....
```
* log 16:37
* 關於副程式,好複雜,看過一次頭暈腦脹。
* 再來非同步的部分,async await 可以用 python 的方式套入,不過還是有點小差別。
* regex正規化的部分就跟python差不了多少
* log 16:43
* 回去看看網頁的部分了。
* 寫了個玩意
```htmlmixed=
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documents</title>
<style>
.callout{
border: 1px solid #ff0080;
margin: 2px 4px;
padding: 2px 6px;
}
.code{
background: #ccc;
margin: 1px 2px;
padding: 1px 4px;
font-family: monospace;
}
</style>
</head>
<body>
<header>
<h1>
Simple
</h1>
</header>
<div id="content">
<p>簡單的HTML</p>
<div class="callout">
<p>callout的div</p>
</div>
<p>Classes (such as <span class = "code"> #content</span>) are unique</p>
<p>Classes (such as <span class = "code"> #callout</span>) are unique</p>
<div id="callout2" class = "callout fancy">
<p>Sinle html</p>
</div>
</div>
</body>
</html>
```
```jsx=
function printDOM(node, prefix){
console.log(prefix + node.nodeName);
for(let i = 0; i < node.childNodes.length; i++){
printDOM(node.childNodes[i], prefix + '\t')
}
}
printDOM(document, '')
```
* f12主控台
![](https://i.imgur.com/pHnEqqj.png)
* log 17:26 (休息)
* 本日有好幾個問題捏,promise, closure, 副程式啥的,其實副程式直覺理解就是直接呼叫
```jsx=
function test(a){
function *(...arge){
console.log('{}, {}, {...args}')
}
}
test(function a[0, ...args])
```
* 理解的有點亂,上面的是隨便打的,看看就好
* log 17:28 吃晚餐。
* 本日結束
{%hackmd BJrTq20hE %}