您好,登錄后才能下訂單哦!
function對象結(jié)構(gòu)(Persion)
Persion{
eat:f()
__proto__:Object{
constructor:
}
}
_proto__ 屬性,它是對象所獨(dú)有的
__proto__屬性都是由一個對象指向一個對象,即指向它們的原型對象
它的作用就是當(dāng)訪問一個對象的屬性時,如果該對象內(nèi)部不存在這個屬性,
那么就會去它的__proto__屬性所指向的那個對象里找,如果父對象也不存在這個屬性,
則繼續(xù)往父對象的__proto__屬性所指向的那個對象里找,如果還沒找到,
則繼續(xù)往上找…直到原型鏈頂端null,此時若還沒找到,則返回undefined
prototype屬性 它是函數(shù)所獨(dú)有的,它是從一個函數(shù)指向一個對象。它的含義是函數(shù)的原型對象,
也就是這個函數(shù)(其實(shí)所有函數(shù)都可以作為構(gòu)造函數(shù))所創(chuàng)建的實(shí)例的原型對象
prototype屬性 作用就是包含可以由特定類型的所有實(shí)例共享的屬性和方法,
也就是讓該函數(shù)所實(shí)例化的對象們都可以找到公用的屬性和方法。任何函數(shù)在創(chuàng)建的時候,
其實(shí)會默認(rèn)同時創(chuàng)建該函數(shù)的prototype對象
p.proto === Persion.prototype,它們兩個完全一樣
總結(jié):
1、我們需要牢記兩點(diǎn):①__proto__和constructor屬性是對象所獨(dú)有的;
② prototype屬性是函數(shù)所獨(dú)有的,因為函數(shù)也是一種對象,所以函數(shù)也擁有__proto__和constructor屬性。
2、__proto__屬性的作用就是當(dāng)訪問一個對象的屬性時,如果該對象內(nèi)部不存在這個屬性,
那么就會去它的__proto__屬性所指向的那個對象(父對象)里找,一直找,直到__proto__屬性的終點(diǎn)null,
然后返回undefined,通過__proto__屬性將對象連接起來的這條鏈路即我們所謂的原型鏈。
3、prototype屬性的作用就是讓該函數(shù)所實(shí)例化的對象們都可以找到公用的屬性和方法,
即p.__proto__ === Persion.prototype。
4、constructor屬性的含義就是指向該對象的構(gòu)造函數(shù),所有函數(shù)(此時看成對象了)最終的構(gòu)造函數(shù)都指向Function
代碼:
//function繼承
function inherits(Child, Parent) {
var F = function() { };
F.prototype = Parent.prototype;
Child.prototype = new F();//修改子類prototype指向
//任何一個prototype對象都有一個constructor屬性,指向它的構(gòu)造函數(shù)
//由于修改了child prototype為F則對應(yīng)的constructor會指向F的prototype的constructor(也就指向了Parent的構(gòu)造函數(shù)了),
//所以要對應(yīng)設(shè)置一個prototype的contructor
Child.prototype.constructor = Child;
Child.super = Parent.prototype;//設(shè)置super屬性,方便調(diào)用父類的prototype方法
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。