Java和Javascript都是面向對象語用,即一切都是對象,但不一樣的是,在Java的世界裏,對象是由類(Class)實例出來的;而在JavaScript的世界中,對象是由類型(Type)衍生出來的。函數
JavaScript是一種prototype based programming語言,與一般的class based programming語言有很大的區別。
1.函數是first class object,即函數與對象具備相同的語言地位。
2.沒有類,只有對象。
3.函數也是一種對象,所謂的函數對象。
4.對像是按「引用」來傳遞的。spa
「prototype」字面意識是「原型」,它是函數(function)的一個保留屬性,該屬性的類型是對象。不信?敲段代碼便知道。prototype
function fn(){}; console.log(typeof fn.prototype); //--> object
既然prototype是對象,那麼這個對象有什麼內容呢?敲敲便知道code
console.log(fn.prototype);
結果:構造函數和__prototype__
那麼,__proto__又是什麼?展開便知道:原來是各類默認方法。對象