---
# System prepended metadata

title: 測試 google blockly 紀錄

---

# 測試 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 %}