經典的再也不能經典的一篇博客:http://www.cnblogs.com/snandy/archive/2012/09/01/2664134.html
js中最propertype的一些方法的理解http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html
原型作用鏈終點:
我們先明白js函數這個名字既有函數屬性可以()執行,也可以是對象屬性可以.進行調用屬性。
Array,Boolean,RegExp這些都是函數。所有他們是普通對象所有他們有__proto__屬性,__proto__屬性都是Function.prototype
所以他們可以后邊加()然后執行。
那么Function.prototype是什么呢:
那么Function.__proto__是什么呢
還有一個問題,就是他們作為函數對象的,prototype屬性繼承自哪里呢。首先是一個Object對象,
那么Number.prototype.__proto__是誰呢。
console.log(Function.prototype.__proto__ === Object.prototype)
// true
這里我們到達了Object這里。
Object.prototype 也是一個對象
其實上邊這個和Object.__proto__==Function.prototype是一樣的。
這里我們可以看到我們打出來的Object指的是方法的Object並不是對象的Object.
這里就又是一個終點了。
所有js的作用於有三個終點:
Object.prototype.__proto__ 打印出來是null
Function.prototype 打印出來是function (){}
Function.__proto__ 打印出來也是function (){}
以下的都可以當成無用的:等待以后刪除:
var sss = new Object();
對於sss是一個對象,任何對象的.__proto__屬性表示的是他構造器的.prototype的值(這里邊掛的方法也就是他繼承的方法或內置方法),而此處Object.prototype的值,typeof 除了function以外的任何Object.prototype都是小寫的object,所以此處是一個Object.prototype的值是一個Object類型的對象。有包含的,valueOf方法和toString方法,isPrototypeOf,hasOwnProperty,當然還有constructor表示的是這個object對象的構造器,Object類,這個類的__proto__是Function.prototype.也就是空的function(){}. 我們查找內置方法的辦法就是,輸入大寫Object.prototype.
這些東西總是忘:
這里我們可以知道,普通的對 d 像的的__proto__屬性是個空的 的{}這是個.
我們調用繼承的方法。 這里我們需要知道,普通的對象的__proto__含有的是他的內置的方法。
var box={name:"yan",arr:[1,3,5],obj:{objName:"objyan",age:20}}創建的對象和 var box1=new Object();是一樣的。他們的__proto__都是Object {}空的object對象。並沒有object對應的屬性和內置方法。(沒有__proto__) 但是其他的方法創建的對象就不同了。
var yan=function(){this.name="yan"} var ss=new yan() ss.__proto__就表示一個yan的空對象,里邊有constructor和__proto__這兩個屬性,然后我們點開__proto__然后就是一個空的object對象。不過這是原型鏈的繼承方式。 不同的繼承方式的__proto__是不同的。
================================================
不同的繼承方式的建立的對象的__proto__是不同的
類的prototype 不論是parent.prototype顯示的是parent{},String.prototype的是String{}但是typeof他們都是objec他們對象的__proto__都是object 不同的繼承方式對象的__proto__是不同的。 所以這里我們需要想什么才是繼承,怎么證明他是繼承的,還是我們只需要管他繼承了父類的方法和屬性就行,不管怎么實現的。 一切方法都繼承自function。我們怎么證明方法繼承自function,然后我們就怎么確定son和parent的關系。所以我們obj.__proto__是自身的son{}對象就不合理,而且你看這個son中的contructor在看prototype也就亂了。