1.js中只有對象,包括對象,函數,常量等。 對象不用解釋。函數也有屬性,常見之一就是prototype。常量也有屬性: (3).__proto__;//Number {}2.函數的prototype 函數是一種特殊的對象,它可以直接通過小括弧來執行自身代碼。 函數還有一個特殊的屬性prototype,它也是一個對象。 prototype對象也有一個特殊的屬性constructor,初始的時候它是指向該函數的。 也就是當js解釋到function關鍵字的時候,會建立兩個對象,一個是function本身,一個是prototype對象。同時將該函數對象的prototype屬性指向prototype,而prototype對象的constructor屬性指向該函數對象。 3.對象的__proto__屬性 每個對象都有一個__proto__屬性(低版本的IE中可能沒有直接給出吧),該屬性十分特殊,因為在調用對象的方法或者訪問對象的屬性時,js會依次遍曆對象本身,該對象的__proto__,該對象的__proto__的__proto__…… 也就是原型鏈繼承的關鍵 4.new關鍵字 new 關鍵字用於通過一個函數建立一個方法。 其實它主要完成三個工作 建立一個對象將該對象的__proto__指向函數的prototype調用該函數(此時注意函數的範圍是第一步建立的對象)最後返回該對象即可。可以以下面的代碼代替 function New(f,args){var a= {};a.__proto__ = f.prototype;f.apply(a,args);return a;} 5.js對象關係圖 其中:xFunction是自訂的函數,xPrototype是xFunction的原型,xObject=new xFunction() Object 是JS內建的Object;_prototype_是Object的原型 Empty是所有函數對象的__proto__,是一個特殊的函數,沒有prototype, 希望大家可以共同探討,給予指點