最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript中prototype與__proto__的關(guān)系詳解

 更新時(shí)間:2018年03月11日 17:09:44   作者:心晴安夏  
這篇文章主要給大家介紹了關(guān)于Javascript中prototype與__proto__的關(guān)系的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

學(xué)到原型的時(shí)候感覺(jué)頭都大了/(ㄒoㄒ)/~~ 尤其是prototype和__proto__ 傻傻分不清  通過(guò)多番查找資料,根據(jù)自己的理解,總結(jié)如下:

一、構(gòu)造函數(shù):

構(gòu)造函數(shù):通過(guò)new關(guān)鍵字可以用來(lái)創(chuàng)建特定類型的對(duì)象的函數(shù)。比如像Object和Array,兩者屬于內(nèi)置的原生的構(gòu)造函數(shù),在運(yùn)行時(shí)會(huì)自動(dòng)的出現(xiàn)在執(zhí)行環(huán)境中,可以直接使用。如下:

var arr = new Array();//使用Array構(gòu)造函數(shù)創(chuàng)建了一個(gè)array實(shí)例arr
arr[0]="a";
arr[1]="b";
alert(arr);//a,b

var obj=new Object();//使用Object構(gòu)造函數(shù)創(chuàng)建了一個(gè)Object實(shí)例obj
obj.name="c";
obj.age=12;
alert(obj.name);//c

我們可以自定義的創(chuàng)建構(gòu)造函數(shù),并為其自定義屬性和方法,如:

//創(chuàng)建構(gòu)造函數(shù)Person
function Person(name,age){
 this.name=name;
 this.age=age;
 this.sayName=function(){
 alert(this.name)//
 };
}

//使用new關(guān)鍵字,來(lái)生成Person實(shí)例
var person1=new Person("Tom",22);
var person2=new Person("Jerry",21);
person1.sayName();//Tom
person2.sayName();//Jerry

注意以下幾點(diǎn):

  • 構(gòu)造函數(shù)的名字始終要以大寫字母開頭(主要是為了區(qū)別于非構(gòu)造函數(shù),也即是區(qū)別于普通函數(shù))
  • 構(gòu)造函數(shù)也就是函數(shù),定義構(gòu)造函數(shù)和定義普通函數(shù)的語(yǔ)法一樣。構(gòu)造函數(shù)和普通函數(shù)的區(qū)別在于:使用他們的方式不同。任何函數(shù)只要使用new操作符來(lái)調(diào)用,那他就可以作為構(gòu)造函數(shù);不使用new操作符來(lái)調(diào)用就是普通函數(shù)
function Person(name,age){
 this.name=name;
 this.age=age;
 this.sayName=function(){
 alert(this.name)//
 };
}

//當(dāng)做構(gòu)造函數(shù)使用
var person=new Person("Tom",22);
person.sayName();//Tom 
//當(dāng)做普通函數(shù)使用
Person("Jerry",30);//添加到window
sayName();//Jerry 等同于window.sayName();

二、原型對(duì)象:

每個(gè)函數(shù)都有一個(gè)prototype屬性,它是一個(gè)指向原型對(duì)象的指針,原型對(duì)象在定義函數(shù)時(shí)同時(shí)被創(chuàng)建,原型對(duì)象的用途是包含所有實(shí)例共享的屬性和方法

function Person(){
}
//自定義原型對(duì)象的屬性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
 alert(this.name);
};
//原型對(duì)象中的所有屬性和方法 都會(huì)自動(dòng)被所有實(shí)例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom

只要?jiǎng)?chuàng)建了一個(gè)新函數(shù),每個(gè)函數(shù)在創(chuàng)建之后都會(huì)獲得一個(gè)prototype的屬性,這個(gè)屬性指向函數(shù)的原型對(duì)象(原型對(duì)象在定義函數(shù)時(shí)同時(shí)被創(chuàng)建),此原型對(duì)象又有一個(gè)名為“constructor”的屬性,反過(guò)來(lái)指向函數(shù)本身,達(dá)到一種循環(huán)指向,

如在上邊的例子中:alert(Person.prototype.constructor===Person);//會(huì)返回true

function Person(){}
alert(Person.prototype.constructor===Person);//true

三、__proto__(注意這里proto左右兩邊都有兩個(gè)"_")

當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個(gè)新實(shí)例后,該實(shí)例的內(nèi)部將包含一個(gè)指針[[Prototype]],該指針指向創(chuàng)建它的構(gòu)造函數(shù)的原型,在腳本上沒(méi)有標(biāo)準(zhǔn)的方法來(lái)訪問(wèn)[[Prototype]],但大多數(shù)瀏覽器都支持通過(guò)__proto__來(lái)訪問(wèn)。

function Person(){
}
//自定義原型對(duì)象的屬性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
 alert(this.name);
};
//原型對(duì)象中的所有屬性和方法 都會(huì)自動(dòng)被所有實(shí)例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
alert(person1.__proto__===Person.prototype);//true

以上述的示例代碼為例,各個(gè)對(duì)象之間的關(guān)系如下圖所示:

 

總結(jié):

①只要?jiǎng)?chuàng)建了一個(gè)函數(shù),該函數(shù)的原型對(duì)象也隨之同時(shí)被創(chuàng)建出來(lái),原型對(duì)象中的屬性和方法被經(jīng)由其相對(duì)應(yīng)的構(gòu)造函數(shù)所創(chuàng)建的實(shí)例所共享

②每個(gè)函數(shù)在創(chuàng)建之后都會(huì)獲得一個(gè)prototype的屬性,這個(gè)屬性指向該函數(shù)的原型對(duì)象

③每個(gè)對(duì)象的__proto__屬性都指向其構(gòu)造函數(shù)的原型

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • JavaScript使用享元模式實(shí)現(xiàn)文件上傳優(yōu)化操作示例

    JavaScript使用享元模式實(shí)現(xiàn)文件上傳優(yōu)化操作示例

    這篇文章主要介紹了JavaScript使用享元模式實(shí)現(xiàn)文件上傳優(yōu)化操作,結(jié)合實(shí)例形式分析了javascript基于享元模式進(jìn)行文件上傳優(yōu)化操作的原理、步驟及相關(guān)使用技巧,需要的朋友可以參考下
    2018-08-08
  • JS回調(diào)函數(shù)簡(jiǎn)單用法示例

    JS回調(diào)函數(shù)簡(jiǎn)單用法示例

    這篇文章主要介紹了JS回調(diào)函數(shù)簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了js回調(diào)函數(shù)的定義與簡(jiǎn)單使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • 淺析JS中NEW的實(shí)現(xiàn)原理及重寫

    淺析JS中NEW的實(shí)現(xiàn)原理及重寫

    本文通過(guò)實(shí)例代碼給大家介紹了JS中NEW的實(shí)現(xiàn)原理及重寫,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-02-02
  • window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析

    window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析

    這篇文章主要為大家介紹了window.location.href和window.open 跳轉(zhuǎn)區(qū)別解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • javascript高級(jí)學(xué)習(xí)筆記整理

    javascript高級(jí)學(xué)習(xí)筆記整理

    打算做一個(gè)js面向?qū)ο蟮呢澇陨?但是最終是流產(chǎn)了,整理了下廢棄的代碼,回顧了下PPT.想學(xué)習(xí)js面向?qū)ο蟮呐笥岩部梢詤⒖枷隆?/div> 2011-08-08
  • 淺談Webpack自動(dòng)化構(gòu)建實(shí)踐指南

    淺談Webpack自動(dòng)化構(gòu)建實(shí)踐指南

    本篇文章主要介紹了Webpack自動(dòng)化構(gòu)建實(shí)踐指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • JS 常用校驗(yàn)函數(shù)

    JS 常用校驗(yàn)函數(shù)

    比較常用到的一些字符驗(yàn)證函數(shù),里面有正則等好東西,推薦大家保存即可直接調(diào)用。
    2009-03-03
  • javascript中鍵盤事件用法實(shí)例分析

    javascript中鍵盤事件用法實(shí)例分析

    這篇文章主要介紹了javascript中鍵盤事件用法,實(shí)例分析了鍵盤事件包含的方法及具體使用技巧,需要的朋友可以參考下
    2015-01-01
  • js查錯(cuò)流程歸納

    js查錯(cuò)流程歸納

    歸納是為了更好的理解。平時(shí)同事有問(wèn)題找我?guī)兔鉀Q問(wèn)題,往往都是很小的問(wèn)題,這種情況他們并不是缺乏解決問(wèn)題的知識(shí),而是需要找到問(wèn)題的辦法
    2012-05-05
  • 小程序封裝路由文件和路由方法(5種全解析)

    小程序封裝路由文件和路由方法(5種全解析)

    這篇文章主要介紹了小程序5種路由方法使用場(chǎng)景,封裝路由文件和路由方法,提升小程序體驗(yàn)和開發(fā)效率,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05

最新評(píng)論

图木舒克市| 易门县| 西城区| 会理县| 霍邱县| 林周县| 利津县| 秦皇岛市| 府谷县| 芒康县| 中方县| 冷水江市| 共和县| 明水县| 获嘉县| 张家界市| 宜黄县| 巴青县| 永寿县| 灌阳县| 石台县| 筠连县| 长寿区| 临城县| 文昌市| 松滋市| 涡阳县| 沾益县| 东台市| 平舆县| 泊头市| 贺州市| 巢湖市| 杨浦区| 盐源县| 青龙| 寿光市| 柘城县| 南川市| 施甸县| 富民县|