動機
之前在看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只有一個指標,所以很好懂,也很直覺,但
- 這樣就不能玩metaclass的那些奇異功能,因為所有method都放在同一個地方
- 不好模擬private,因為所有method都放在同一個地方,像js要自己用clousre包
js的this
會要這個就是method阿,也就是說,js把method當成一級function用…
但this因為是關鍵字,所以不能用單純的變數去看
- 如果在object中宣告,以及在被調用時有使用物件,就用物件作為this
- 如果都沒有就是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