目的: 了解 JS 箭頭函式的用法 =>
2022年9月1日 星期四
JS - 箭頭函式的用法 => , 即函式的簡約寫法
JS - class 的寫法 - 和 prototype的關係, 如何用 extends 達到繼承 (inheritance) 效果
目的: 了解 JavaScript class 的寫法及 繼承(extends) & static 的用法
class 只是宣告函式的一種特別的語法。
2>class person_child extends person_parent{
}
-->JavaScript將 person_child.prototype 的 [[Prototype]] 設為 person_parent.prototype,
[傳統寫法] [class寫法]
一.傳統寫法 - 物件屬性 - 以 prototype 定義屬性1>傳統宣告 Object _的方法 - function ObjectName(par_param) { }
1>>定義物件 - 以 function 函式定義物件 - constructor() , this.property=xxxx;
function Person(par_name){
this.name=par_name;
}
2>>定義屬性 Object.prototype.property
3>>定義方法 Object.prototype.property=function() { }
Person.prototype.SayHello=function(){console.log(" Hello !! "+this.name);}
4>實際建立 Object - new Constructor
var Person1=new Person("parent Micro Tsai");
Person1.SayHello();
this.name=par_name;
this.age=par_age
}
//person_son.prototype.__proto__ = Person.prototype;
person_son.prototype.ShowName = function(){
console.log("My name is "+this.name);
}
person_son.prototype.ShowAge = function(){
console.log("My age is "+this.age);
}
var person_son1=new person_son("child Micro Tsai",28);
person_son1.SayHello(); //person_son1未定義 SayHello ,因繼承自 parent ,所以可以用 SayHello
person_son1.ShowName();
person_son1.ShowAge();
三.class 的物件寫法
Person_child.SetAge(57);
2022年8月31日 星期三
JS Callback function - function 的執行順序
目的 : 認識 callback function 的定義及用法
for
迴圈並不會等待處理作業(statement)結束後才繼續,一. callback function 的定義: call function , 只有滿足某個條件(event 發生時)才會被執行
Callback function 跟一般的函式沒什麼不同, 差別在於被呼叫執行的時機
Office.addEventListener( '電話響', function(){ /* 接電話 */ }, false);var handler = function() { /* 接電話 */ };Office.addEventListener( '電話響', handler, false);
var funcA = function(){console.log('function A');};var funcB = function(){console.log('function B');};
funcA();
funcB();
--> 先印 function A , 再印 function B
Ex4:
window.setTimeout(function(){ console.log('function A'); },
}
window.setTimeout(function(){console.log('function B'); },
Math.random()*1000);
}
window.setTimeout(function(){
funcA
在執行的時候要等多久, funcB
都會等到 console.log('function A');
之後才執行。console.log
印出: 0 1 2 3 4
for
迴圈並不會等待處理作業(statement , window.setTimeout )結束後才繼續,因 function() 內未宣告 var i, 所以會在函式外層取得 (此時for迴圈已跑完 i=5) , 所以印出 5
JS Array 陣列宣告 - push,pop - unshift,shift
目的: 說明 陣列 (Array) 的宣告及使用
陣列可以看作是一種特別的「物件」,同樣是零至多個元素的集合
陣列內可以是原始的資料類型、其他陣列、函式等等
陣列是個有順序性的集合,且只能透過 []
來存取。
陣列的索引是由 0
開始計算的
一.陣列宣告的3個方法:
1>方法1: new Array();
a[0] = "apple";
a[1] = "boy";
a[2] = "cat";
a.length; // 3
a[0] = "apple";
a[1] = "boy";
a[2] = "cat";
a.length; // 3
a.length; //3
二.陣列的新增/刪除
ARRAY.push() ; Array.pop()
ARRAY.unshift() ; Array.shift()
var Tmp_el=array.shift();
console.log(array); // ['b','c']
Tmp_el=array.shift();
console.log(array); // ['c']
Tmp_el=array.unshift(4,"e");
console.log(array); // [4,"e",'c']
JS - - Object,Array的宣告 , Object 基本型別 及 物件型別 - Object 的建立 - 屬性的存取 - typeof 型別的判斷 - == ===
JavaScript 內建的型別主要可以分成基本型別 (Primitives) 與物件型別 (Object) 兩大類。
除了以上幾種之外,其他都可以歸類至物件型別 (Object)
物件可以是瀏覽器預先定義好的,當然也可以是由自己定義物件的屬性與內容
{ }
,即可建立起一個新的物件,並且在建立物件的同時直接指定屬性至該物件內。這種建立物件的方式稱為「物件實字 (Object literal)」,同時也是
JSON
格式的核心語法。person["name"]; // 'Kuro'
console.log("person[age]]",person["age"]); //50
delete person["age"];
console.log("person[age]]",person["age"]); //undefined
typeof
運算子回傳的東西都是「字串」typeof true; // 'boolean'
!=
的版本會做自動轉型,而 !==
則不會做自動轉型。JS function - var 變數宣告, 及scope變數的範圍 - 全域變數/區域變數
Ex1: 函式內的變數宣告
var x = 1;
-->
在函式區塊內透過 var 定義的 x 實際上只屬於這個函式。
換句話說,外面的 x 跟 function 內的 x 其實是兩個不同的變數。
function
可以讀取外層已經宣告的變數,
但外層拿不到裡面宣告的變數。就會開始尋找變數 x 了,在自己的 scope 找... 啊,找到了!
雖然是在下面,但可以確認的是自己的 scope 裡面有宣告,
更準確地說,
- 變數有效範圍 (scope) 的最小切分單位是 function (ES6 的 let 與 const 例外)
即使是寫在函式內,沒有 var 的變數會變成「全域變數」
全域變數指的是全域物件 (頂層物件) 的「屬性」
DOM - 2 Event 的特殊處理 - 停止event預設動作 - 停止往上冒泡 -bubble,catch
目的: 停止event預設動作 - 停止往上冒泡處理說明:1> Label 的event flow 為 bubble 方式時
2> 觸發 lbl.onclick event後 , console 顯示 "lbl click"
瀏覽器將 click event 自動往下傳, 即傳給 checkbox.click event
3> 因 checkbox event 為 bubble 方式,所以又往上傳給 lbl
即觸發 lbl.onclick event , concole 又顯示 "lbl click"
--> 即 lbl.onclick event 被觸發兩次
一.要阻擋事件向上冒泡傳遞:
--> event.stopPropagation()
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="src/style.css" />
</head>
<body>
<h1>Hi friend, try edit me!</h1>
<label class="lbl">
Label <input type="checkbox" name="chkbox" id="chkbox" />
</label>
// label
<script>
var lbl = document.querySelector('.lbl');
var chkbox = document.querySelector('#chkbox');
console.log('lbl click');
}, false);
chkbox.addEventListener('click', function (e) {
console.log('chkbox click');
}, false);
</script>
<script src="src/script.js"></script>
</body>
</html>
console.log('chkbox click');
e.stopPropagation();
console.log('Google!');
}, false);