動機

之前在看js的proto時,突然想起之前看的metaclass

proto就是上一層

原本是說物件是在這層沒有找到就要往上找,在js就是proto

物件的上一層就是class,class的上一層就是parent

var nick = new Person('nick', 18);

console.log(nick.__proto__ === Person.prototype) // true

js只有一個指標,但metaclass有兩個,why?

js只有一個指標,所以很好懂,也很直覺,但

  1. 這樣就不能玩metaclass的那些奇異功能,因為所有method都放在同一個地方
  2. 不好模擬private,因為所有method都放在同一個地方,像js要自己用clousre包

js的this

會要這個就是method阿,也就是說,js把method當成一級function用…

但this因為是關鍵字,所以不能用單純的變數去看

  1. 如果在object中宣告,以及在被調用時有使用物件,就用物件作為this
  2. 如果都沒有就是windows(global)

順便記一下: JavaScript是synchronous在執行的

function waitThreeSeconds(){
 var ms = 3000 + new Date().getTime();
 while(new Date() < ms){}
 console.log("finished function");
}

function clickHandler(){
 console.log("click event!");
}

document.addEventListener('click', clickHandler);
console.log("started execution");
waitThreeSeconds();
console.log("finished execution");
/*
started execution
finished execution
click event! * n
*/

在等的時候點擊,waitThreeSeconds沒有被中斷,而是會等到跑完再反映事件

先把execution context的內容執行完畢,接著才去執行"event queue"

Ref

該來理解 JavaScript 的原型鍊了 談談 JavaScript 中的 “this” 和它的問題 談談JavaScript中的asynchronous和event queue