2021年8月23日 星期一

關於 JavaScript 的 eval() 的直接喚起與間接喚起

 關於 JavaScript 的 eval() 的直接喚起與間接喚起

前言

  最近發現 eval() 遽然有分直接喚起與間接喚起,雖然平常我不太用這個函式,但有時不得已還是要使用,所以就來做個學習,在此做個紀錄。


內容

  直接看範例,如下

var x = 'xxx';
function test(){
  var x = 'yyy';
  console.log( eval( 'x' ) );//'yyy'
  var f = eval;
  console.log( f( 'x' ) );//'xxx'
  console.log( ( 0 , eval )( 'x' ) );//'xxx'
  
}
test();


範例第一次和喚起 eval() 會顯示"yyy",這點跟認知的一樣,也被稱為"直接喚起",那間接喚起呢?

可以看到事先用一個變數賦值 eval 後,再透過該變數來喚起 eval() ,這樣的結果遽然不一樣!可以看到結果遽然顯示"xxx",也就是顯示的是 global 變數,而非 local 變數,間接喚起還有一個特殊的寫法,也就是"( 0 , eval )",這個語法可以在  [ developer.mozilla.org ] eval() 裡找到,和上述利用變數賦值 eval 的結果會一樣,這個語法可以不用再宣告變數,相當方便。請注意,範例的宣告都是用 var 來宣告,如果改成 let 的話就永遠只會顯示 local 變數,也就是如果程式碼已經習慣用 let 來宣告的話,那直接喚起與間接喚起沒差。


參考資料

[ developer.mozilla.org ] eval()

2021年8月16日 星期一

Javascript 的 class 繼承的注意事項

 Javascript 的 class 繼承的注意事項

前言

  在上一次的 完整的 JavaScript 使用 Class 的範例 沒提到繼承相關的語法,由於本身設計的習慣不太愛用繼承的特性,但最近抽空研究一下繼承,法現有的特性跟我想的不一樣,在此做個紀錄。


內容

  先看範例,如下

class BaseClass{
  call(){
    console.log('I am BaseClass' );
  }
}
class ExClass extends BaseClass{
  call(){
    console.log('I am ExClass' );
  }
}
class ExClass1 extends ExClass{
  call(){
    //Follow code will failed!
    //super.super.call();
    //
    super.call();
    console.log('I am ExClass1' );
  }
}
let a = new ExClass1();
a.call();


範例的繼承關係很簡單,BaseClass -> ExClass -> ExClass1 ,單純的喚起 call() ,因為繼承的關係會發生 override ,要喚起父類別可以透過 super ,但如果企圖從 ExClass1 喚起 BaseClass 的話這是不允許的!本以為可以透過 super.super 的方式來達成,但實際實驗卻是會有錯誤,這意思是 JavaScript 無法跨過兩次以上的繼承,雖然實務上應該不太會碰到,但還是要注意一下。


參考資料

[ developer.mozilla.org ] super


相關文章與資料

完整的 JavaScript 使用 Class 的範例

2021年8月9日 星期一

完整的 JavaScript 使用 Class 的範例

完整的 JavaScript 使用 Class 的範例

前言

  在之前的 Javascript 開始在 Class 裡支援 private method 講述了 private method 的使用,但由於我個人不常用 class 語法,所以就想要留一個範例寫法,在此做個紀錄。


內容

  直接看範例

class MyClass{
  static #staticVariable = 'I am static variable.';
  constructor(){
      this._name = 'I am MyClass';
  }
  //property
  get name(){
    return this._name;
  }
  set name(name){
    this._name = name;
  }
  //public method
  publicMethod(){
    console.log('I am public method.');
  }
  //private method
  #privateMethod(){
    console.log('I am private method.');
  }
  //static method
  static staticMethod(){
    console.log('I am static method.');
  }
}


先看到 static variable 的寫法,這裡有用到 private 的語法,意外的遽然可以用,在 class 裡可以給預設值,再透過 static method 來提取或操作,這是常見的用法,如果不需要唯讀屬性的話可以移除"#"。 getter 與 setter 的語法相當簡單好懂,但不知為什麼並不能搭配 static 來使用,所以static variable 還是要透過 static method 來提取。public method 與 private method 在 Javascript 開始在 Class 裡支援 private method 已經提過了就不再講述。static method 語法簡單,只需加"static "即可。


參考資料

[ developer.mozilla.org ] getter

[ developer.mozilla.org ] setter


相關文章與資料

Javascript 開始在 Class 裡支援 private method

2021年8月2日 星期一

Javascript 開始在 Class 裡支援 private method

 Javascript 開始在 Class 裡支援 private method 

前言

  最近查找資料時發現 Javascript 開始在 Class 裡支援 private method ,實驗了一下發現 Chrome 與 Firefox 更新到最新的版本都可以支援,之前對 Class 的語法很介意它不支援 private method ,所以就不怎麼愛用,現在這個問題沒了,就順便鎮這個機會做個學習,在此做個紀錄。


內容

  先看以下範例

class MyClass {
  publicMethod() {
    console.log("I am public method.");
  }
  #privateMethod() {
    console.log("I am private method.");
  }
  callAllMethod() {
    this.publicMethod()
    this.#privateMethod();
  }
}

let people = new MyClass();
people.callAllMethod();


private method 的語法異常的簡單,只需在 method 的前面加上"#"來區隔,但要注意的是喚起時也需要"#"來喚起,不能直接打名稱,這樣以後就可以捨棄用閉包的做法來完成 private method 。


參考資料

[ dev.to ] New Features in ECMAScript 2021 (with code examples)

2021年7月26日 星期一

在 Krita 安裝新的筆刷

 在 Krita 安裝新的筆刷

前言

  常常在看 Krita 的教學影片時發現別人有很多一看就知道不是官方的預設筆刷,所以就想學一下如何安裝新的筆刷,在紫把學習的過程做個紀錄。


內容

  這次示範的筆刷可以在 [ www.davidrevoy.com ] Deevad 裡下載,如下圖

下載筆刷

下載後解壓縮可以得到 .bundle 檔,接著開啟 Krita ,如下圖操作
選取"管理資源"

操作後可以得到下圖
選取"匯入資源包"

操作候選取下載來的 .bundle 檔後,可以得到下圖
安裝成功的畫面

安裝完後就可以在筆刷視窗看到新增的筆刷,如下圖
安裝完後的筆刷視窗

2021年7月19日 星期一

修正 Krita 的直線工具異常對齊的問題

 修正 Krita 的直線工具異常對齊的問題

前言

  最近在使用 Krita 時發現直線工具怪怪的,明明沒有壓 shift 也會發生對齊的狀況,而且奇怪的是還會看地方,在不同的地方會有不一樣的對齊行為,這裡把解決的過程做個紀錄。


內容

  在發生直線工具異常的當下本以為是該版本的 Krita 的 Bug ,所以就去更新到最新版本,但不幸地狀況並沒有改變,異常的對齊行為依舊,拖動目的點時總是特定角度就發生對齊,由於異常對齊的地方剛好發生在對稱工具上,如下圖

Krita 的對稱工具

但我發現不論怎麼移動對稱工具的線,直線工具的對齊行為還是會異常,所以排除是對稱工具造成的異常,最後在 google 一陣子發現關鍵字"Snapping",中文翻譯是"吸附到",原來 Krita 有預設的 Snapping ,要如何關閉它呢?如下圖

關閉 Krita 的預設的吸附


Krita 預設會有"吸附到影像邊框"與"吸附到影像中心",這就是造成直線工具異常對齊的兇手,只要將這兩個關閉就不會再發生異常對齊了。


參考資料

[ docs.krita.org ] Snapping

2021年7月12日 星期一

關於 Aery pf1061 的使用心得

 關於 Aery pf1061 的使用心得

前言

   Aery pf1061 是一個平價繪圖板,價格親民又有 8192 階的力度感應,但最近它突然的就壞了,想想我只用了一年兩個月左右它遽然就壞了,這次就順便把使用心得做個紀錄。

 

內容

  Aery pf1061 繪圖板如下圖

Aery pf1061 繪圖板

筆與筆座如下圖

筆與筆座

外觀不知是不是為了省成本使用了看起來很廉價的塑膠,照片由於解析度不足所以看不出來,繪圖板的工作區域相當大( 25.40 cm X 15.24 cm),左側的快捷鍵由於我個人不太愛用繪圖板上的快捷鍵,所以不太清楚他到底好不好用,它是一個中間有個按鍵,並有左右旋轉的功能,最外圈的上下左右各有一個按鍵,可以在原廠的軟體設定這些按鍵與旋鈕的功能。


  原廠軟體的畫面如下

原廠軟體

這個軟體可以調整繪圖板與筆的快捷鍵,也可以調整工作區的大小,但我覺得比較實用的是可以調整壓力,如下圖
原廠軟體的調整壓力

在這裡調整的話就不用每進一個軟體都要調一次,而且提供用曲線的方式來調整,想當直觀


  整體上來用起來相當舒適,由於工作區域大加上 8192 階的力道,可以減少放大縮小的次數,筆的下方按鍵不知是不是我握筆姿勢不良,總是很容易誤按到,可以透過原廠軟體把他調成無作用來解決。原廠軟體本身可以用曲線的方式來調整力度,原廠設定對我來說力度太重了,所以我通常會調輕。


  不知是不是採到雷,這產品我只用了一年兩個月它就故障了,它故障的情形是繪製時會不定時發生自動放開的狀況,也就是劃線時有開頭也有結尾,但中間會不見!它是自動放開,可以透過 Ctrl + Z 來發現,還會不定時的發生卡頓,就是畫到一半會發現明明筆一直在動,但顯示出來卻是筆一直停留在原地,本想這是驅動程式的問題,就透過更新驅動程式的方式來解決,但發現無效,但我不死心又把繪圖板插到另外一台電腦才真正確認是繪圖板有問題。該如何維修呢?從故障的情形來看,繪圖板根筆都有可能有故障,這時我才發現一個有趣的問題,官方為什麼會有只賣"筆"的賣法,一隻筆大概 600 元,如果只是"筆"故障,這樣我就花  600 元,但問題是要如何確認只是"筆"故障?如果壞的是繪圖板,那就變成我多買了一支筆,這問題遽然困擾我一晚,最後我決定直接買 Wacom 的繪圖板,而不是在這決定要不要重買一塊 Aery pf1061 或是賭是不是只有"筆"壞掉,想想當初會選擇 Aery pf1061 就 是因為它 CP 值高,但沒想到它遽然不太耐用,所以最後就決定直接買 Wacom 的繪圖板,這次可真是學習的什麼較便宜沒好貨。

 

參考資料

[ www.aery.pro ] Aery 官網