welcome to Cheeto's blog

0%

原始型別的包裹物件與原型的關聯

1
2
var a = 'a';
console.log(a.toUpperCase()); // A

這邊可以看到我們利用 toUpperCase() 的方法來讓本來a變成大寫,而toUpperCase()其實就是原型的方法。

1
2
var b = new String('bcde');
console.log(b);

原始型別的包裹物件與原型的關聯-1

雖然利用了包裹物件會讓純值變成物件型別,但是我們可以利用這個方法來看原型裡面的所有屬性及方法。

閱讀全文 »

原型在哪裡?

JavaScript 是一門物件導向的程式語言,因為沒有 Class,所以它的繼承方法是透過 「原型」(prototype) 來進行實作。

原形的特性

  • 一樣具有物件的特性
  • 向上查找
  • 原型可共用方法及屬性

當我們嘗試在某個物件找一個它本身並不存在的屬性時,它會往上(原型物件)找尋,直到找到最頂層級時,都會找到Object.prototype才會停止。

閱讀全文 »

this

  • 每個執行環境都有屬於自己的 this 關鍵字
  • this 與函式如何宣告沒有關聯性,僅與呼叫方式有關
  • 嚴格模式下,簡易呼叫會有很大個改變

this的實際指向跟我們如何去呼叫函式是有很大的關聯性的!

this指的並不是函式本身,而是指向目前呼叫函式或方法的擁有者(owner)物件。所以函式需要了解函式的幾種調用方式,就能一併了解this在這些情況下的不同。

影響函式this的調用方式

閱讀全文 »

閉包

1
2
3
4
5
6
7
8
9
10
11
function storeMoney() {
var money = 500;
return function (price) {
money = money + price;
return money
}
};
var mingMoney = storeMoney();
console.log(mingMoney(50)); // 550
console.log(mingMoney(50)); // 600
console.log(mingMoney(50)); // 650

這邊可以發現 mingMoney 的值有繼續被增加,原因是實際上釋放記憶體的條件是「當變數無法被引用時就會釋放記憶體」,而現在這個函式被綁定在全域變數上,所以它能夠不斷的呼叫,所以記憶體並不會被釋放。

閱讀全文 »

參數

1
2
3
4
5
6
7
8
9
function callName(a){
console.log('第一個:' +a);

var a;
console.log('第二個:' +a);
a = '杰倫';
console.log('第三個:' +a);
};
callName('小明');

會呈現 ↓

參數覆蓋觀念

所以說用宣告的方式其實沒辦法覆蓋掉的,如果想要覆蓋掉就直接定義一個新的值給 a

閱讀全文 »

什麼是函式

1
2
3
4
5
6
7
8
function afunction(parameter) {
var localVariable = '區域變數';
console.log(this, localVariable); // This、區域變數

return '附加一段' + parameter; // 回傳、參數
}
var data = afunction('參數');// 呼叫函式
console.log(data);

結果會呈現 ↓

函式結構

function 有預設一個回傳的,所以它能夠被當作表達式來用。

閱讀全文 »