成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript 之 prototype與__proto__

WrBug / 1699人閱讀

摘要:首先,先介紹一個(gè)今天的主角隱式原型與顯式原型什么是和顯式原型在每一個(gè)函數(shù)請(qǐng)注意是函數(shù)創(chuàng)建之后都會(huì)有一個(gè)叫的屬性,這個(gè)屬性指向的是函數(shù)的原型對(duì)象。最后總結(jié)一下對(duì)象有屬性指向該對(duì)象的構(gòu)造函數(shù)的原型對(duì)象。

首先,先介紹一個(gè)今天的主角:proto(隱式原型)與prototype(顯式原型)

什么是__proto__和prototype?

prototype(顯式原型)
在每一個(gè)函數(shù)(請(qǐng)注意是函數(shù))創(chuàng)建之后都會(huì)有一個(gè)叫prototype的屬性,這個(gè)屬性指向的是函數(shù)的原型對(duì)象。

__proto__(隱式原型)
javascript 中任意對(duì)象都具有一個(gè)內(nèi)置屬性,在ES5之前并沒有標(biāo)準(zhǔn)的方法訪問這個(gè)屬性,但是在絕大多數(shù)瀏覽器中都支持通過__proto__來訪問這個(gè)屬性,我們叫他隱式原型

prototype 和 __proto__之間的聯(lián)系

首先我們來看一個(gè)例子:

 function Foo(){}

 var foo = new Foo();

 foo.__proto__ === Foo.prototype; //=>true

由上面我們可以看出函數(shù)foo的隱式原型指向其構(gòu)造函數(shù)的顯式原型.

通過這個(gè)我們能得出一個(gè)這樣的結(jié)論么:
某對(duì)象(萬物皆對(duì)象).__proto__ === 其構(gòu)造函數(shù).prototype么,
答案是否定的,我們來看以下例子:

let obj = {name: "zarr"};
let sonObj = Object.create(obj);
console.log(sonObj.name); //=>zarr
console.log(sonObj.__proto__ === obj.prototype) //=>false
console.log(sonObj.__proto__ === obj) //=>true 

ok,我們?cè)倏匆粋€(gè)例子

var Obj = { a: 13 };
var obj = Object.create(Obj);
console.log(obj.a); //=>13
console.log(obj.__proto__ === Obj) //=>true

var Func = function () {
    this.a = "ds";
}

var func = Object.create(Func);
console.log(func.__proto__ === Func.prototype) //=>false
console.log(func.__proto__ === Func) //=>true
console.log(func.a) //undefined

不是說一個(gè)對(duì)象的隱式原型等于起構(gòu)造函數(shù)的原型? 為什么這個(gè)時(shí)候又等于這個(gè)構(gòu)造函數(shù)了?
這就要分析一下Object.create的實(shí)現(xiàn)了,其實(shí)實(shí)現(xiàn)起來也不難,大家看下面

Object.create = function(obj){
     function f() {} 
     f.prototype = obj;
     return new f();
}

這下明朗了, 通過Object.create構(gòu)造出的對(duì)象其實(shí)還是new出來的對(duì)象,比如上例的var func = Object.create(Func); func.__proto__ === f.prototype === Func,
func.__proto__ === f.prototype這個(gè)還是成立的,但是由于函數(shù)f在調(diào)用完Object.create方法之后就被銷毀了,所以只有func.__proto__ === Func。

ok,最后總結(jié)一下
1.對(duì)象有屬性__proto__,指向該對(duì)象的構(gòu)造函數(shù)的原型對(duì)象。
2.方法除了有屬性__proto__,還有屬性prototype,prototype指向該方法的原型對(duì)象。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93650.html

相關(guān)文章

  • JavaScript原型原型鏈

    摘要:個(gè)人博客原文地址萬物皆對(duì)象在中除值類型之外,其他的都是對(duì)象,為了說明這點(diǎn),我們舉幾個(gè)例子我們可以使用來做類型判斷除了屬于值類型之外,其他都是對(duì)象。 個(gè)人博客原文地址 萬物皆對(duì)象 在JavaScript中除值類型之外,其他的都是對(duì)象,為了說明這點(diǎn),我們舉幾個(gè)例子我們可以使用typeof來做類型判斷 typeof a; // undefined typeof 1; ...

    wuyangchun 評(píng)論0 收藏0
  • 深入學(xué)習(xí)js——原型和原型鏈

    摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡(jiǎn)單,而是因?yàn)閺囊婚_始B...

    FingerLiu 評(píng)論0 收藏0
  • 深入學(xué)習(xí)js——原型和原型鏈

    摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡(jiǎn)單,而是因?yàn)閺囊婚_始B...

    xialong 評(píng)論0 收藏0
  • JavaScript深入從原型到原型鏈

    摘要:深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...

    Songlcy 評(píng)論0 收藏0
  • Javascript重溫OOP原型原型鏈

    摘要:在構(gòu)造函數(shù)中的中定義的屬性和方法,會(huì)被創(chuàng)建的對(duì)象所繼承下來。從上面的輸出結(jié)果看出,指向了其構(gòu)造函數(shù)的,而本身也是一個(gè)對(duì)象,其內(nèi)部也有屬性,其指向的是直到最后指向,這條原型鏈才結(jié)束。和都指向,說明原型鏈到終止。 prototype原型對(duì)象 每個(gè)函數(shù)都有一個(gè)默認(rèn)的prototype屬性,其實(shí)際上還是一個(gè)對(duì)象,如果被用在繼承中,姑且叫做原型對(duì)象。 在構(gòu)造函數(shù)中的prototype中定義的屬性...

    lindroid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<