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

JS原型與原型鏈的深入理解

 更新時間:2017年02月15日 09:59:10   作者:落落月  
這篇文章主要和大家一起深入理解JS原型與原型鏈,原型是JavaScript中一個比較難理解的概念,本文為大家解決這個難題,感興趣的小伙伴們可以參考一下

要了解原型和原型鏈,首先要理解普通對象和函數對象。

一、普通對象和函數對象的區(qū)別

在Javascript的世界里,全都是對象,而對象之間也是存在區(qū)別,我們首先區(qū)分一下普通對象和函數對象,如下代碼:

function f1(){};
var f2 = function(){};
var f3 = new function(){};

var o1 = {};
var o2 = new Object();
var o3 = new f1();

console.log(typeof Object); //function
console.log(typeof Function);//function
console.log(typeof f1) //function
console.log(typeof f2) // function
console.log(typeof f3) //function
console.log(typeof o1) //object
console.log(typeof o2) //object
console.log(typeof o3)// object

在上面的代碼中可以看出,f1、f2和f3都是函數對象,而o1,o2和o3都是object對象,也就是普通對象,函數對象本質就是由new function()構造而來,其他的都是普通對象;函數對象和普通對象理解之后,后文會說明兩者的區(qū)別。

二、原型

在JavaScript中,原型也是一個對象,原型的作用,則是實現(xiàn)對象的繼承。

在js的所有函數對象中,都存在一個屬性prototype,該屬性對應當前對象的原型。

而所有的JavaScript對象,都存在一個_proto_屬性(由于_proto_是個非標準屬性,因此只有ff和chrome兩個瀏覽器支持,標準方法是Object.getPrototypeOf()),_proto_屬性指向實例對象的構造函數的原型,理解起來就如下:

var p = new Person(); 
console.log(p._proto === Person.prototype)//true 

從上面代碼可以看出,p是實例對象,Person是p的構造函數,可以看出來p的_proto_屬性指向構造函數Person的原型。

下面用代碼來解釋一下js是如何通過原型進行繼承的:

var parent = function(name){
 this.name = name;
}
parent.prototype.getName = function(){
 return this.name;
}
var son = new parent("huahua");

console.log(son.getName());//'huahua'

顯然,son繼承了parent的原型中的函數屬性getName。

三、原型鏈

除開Object的prototype的原型是null以外,所有的對象和原型都有自己的原型,對象的原型指向原型對象。

在層級多的關系中,多個原型層層相連則構成了原型鏈。

在查找一個對象的屬性時,倘若在當前對象找不到該屬性,則會沿著原型鏈一直往上查找,知道找到為止,如果到了原型鏈頂端,還沒找到,則返回undefined。

四、constructor

constructor是構造函數創(chuàng)建的實例的屬性,該屬性的作用是指向創(chuàng)建當前對象的構造函數。

例如,son.constructor == parent;//true

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Flex通過JS獲取客戶端IP和計算機名的實例代碼

    Flex通過JS獲取客戶端IP和計算機名的實例代碼

    這篇文章主要介紹了Flex通過JS獲取客戶端IP和計算機名的實例代碼,有需要的朋友可以參考一下
    2013-11-11
  • 超精準的javascript驗證身份證號的方法

    超精準的javascript驗證身份證號的方法

    這篇文章為大家分享了一個超精準的javascript驗證身份證號的具體實現(xiàn)方法,根據身份證號對其進行性別的判定,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 微信小程序實現(xiàn)搜索歷史功能

    微信小程序實現(xiàn)搜索歷史功能

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)搜索歷史功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 微信小程序入口場景的問題集合與相關解決方法

    微信小程序入口場景的問題集合與相關解決方法

    這篇文章主要介紹了微信小程序入口場景的問題集合與相關解決方法,從零開始開發(fā)一個小程序,大多數坑點都是在微信小程序的各個入口場景處。所以這里整理一下微信小程序的各個入口場景會面臨的問題以及解決方案,需要的朋友可以參考下
    2019-06-06
  • JavaScript中的全局對象介紹

    JavaScript中的全局對象介紹

    這篇文章主要介紹了JavaScript中的全局對象介紹,對于任何JavaScript程序,當程序開始運行時,JavaScript解釋器都會初始化一個全局對象以供程序使用,需要的朋友可以參考下
    2015-01-01
  • 通過JavaScript實現(xiàn)動態(tài)圣誕樹詳解

    通過JavaScript實現(xiàn)動態(tài)圣誕樹詳解

    這篇文章主要為大家介紹幾個好看的基于HTML+CSS+JS的圣誕樹,希望圣誕節(jié)那天圣誕老爺爺能把我喜歡的你塞到我床上。感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • JavaScript定時器原理詳解

    JavaScript定時器原理詳解

    這篇文章主要介紹了JavaScript定時器原理,setTimeout()方法用于設置一個定時器,該定時器在定時器到期后執(zhí)行調用函數,文章圍繞JavaScript定時器相關資料展開以下內容,需要的朋友可以參考一下
    2021-12-12
  • JSON.parse 解析字符串出錯的解決方法

    JSON.parse 解析字符串出錯的解決方法

    程序中很多數據是動態(tài)拼接而成的json數據,最近在用json的時候老是現(xiàn)JSON.parse錯誤
    2010-07-07
  • 推薦閱讀的js快速判斷IE瀏覽器(兼容IE10與IE11)

    推薦閱讀的js快速判斷IE瀏覽器(兼容IE10與IE11)

    這篇文章主要介紹了推薦閱讀的js快速判斷IE瀏覽器(兼容IE10與IE11),因為ie11取消了很多低版本的判斷,很多js都需要修改了,這里簡單介紹下需要的朋友可以參考下
    2015-12-12
  • javascript中使用正則計算中文長度的例子

    javascript中使用正則計算中文長度的例子

    這篇文章主要介紹了javascript中使用正則計算中文長度的例子,需要的朋友可以參考下
    2014-04-04

最新評論

从化市| 古丈县| 玉环县| 理塘县| 昂仁县| 久治县| 梁平县| 黄浦区| 定州市| 中宁县| 濉溪县| 西峡县| 新巴尔虎右旗| 容城县| 获嘉县| 勐海县| 杭州市| 凤凰县| 来宾市| 辛集市| 丰县| 赫章县| 奇台县| 深水埗区| 庆云县| 石首市| 额济纳旗| 阿城市| 房山区| 田阳县| 赣州市| 永宁县| 永平县| 冀州市| 民乐县| 梁平县| 曲沃县| 修武县| 红原县| 娄烦县| 武夷山市|