規則:
1.全部的對象都有__proto__屬性,指向他構造函數的原型
2.函數具備prototype屬性,指向該函數的prototype
3.函數也是對象,因此函數也有__proto__屬性,指向構造函數的原型,其構造函數即爲Function函數
4.全部的函數都是Function的實例
5.全部函數的原型的__proto__都是Object的一個實例
6.內置函數的構造函數是一個匿名函數,且沒有prototype 如 Function,Array,Object
7.JavaScript高級程序設計P110每一個函數都是Function的實例
function f(){}; //
var f1 = new f();//
var f0 = f.prototype.__proto__ ;//使f0指向f的原型的原型對象
得出如下結論:
1. f1.__proto__ == f.prototype //規則1
2. f.__proto__ == Function.prototype //規則3 和 規則4
3. f0.__proto__==f.prototype.__proto__.__proto__ == Object.prototype.__proto__==null //規則5和規則1
4. f.prototype.__proto__== Function.prototype.__proto__; Function.prototype.__proto__ == Object.prototype ;
5. Function.__proto__ == Object.__proto__ //內置函數的構造函數是同一個函數
6. Function.__proto__.__proto__ == Object.prototype //內置函數的構造函數的構造函數是Object
7. Object.prototype.__proto__ == null
8. typeof(Function.__proto__) == "function"
9. Function.__proto__ instanceof Function == false //結合7,這證實instanceof不是要來檢測實例的萬無一失的方法或者規則 7是錯誤的,函數
問題:instanceof是檢測什麼的;Function的__proto__是什麼,既然是個函數那麼爲何沒有prototype屬性。
prototype