摘要:如前面提到,實例對象通過訪問原型。那么,原型鏈?zhǔn)裁磿r候到頭呢默認(rèn)的原型鏈結(jié)構(gòu)又是怎樣的呢凡是使用構(gòu)造函數(shù),并且沒有利用賦值方法修改原型的對象,則保留默認(rèn)的原型鏈,該原型鏈通過一直向上訪問必須最終到頭,返回值。原型也是一個對象,繼承自。
原型鏈 什么是原型鏈
根據(jù)之前關(guān)于原型的知識(https://segmentfault.com/a/11...),漸漸引出了原型鏈的概念。凡是對象都有原型,而在JavaScript中,萬物皆對象,所以,原型也是對象,也具有原型,也就是原型的原型,如此下去,會構(gòu)成一個對象序列,該結(jié)構(gòu)即為原型鏈。如前面提到,實例對象通過 proto 訪問原型。
那么,原型鏈?zhǔn)裁磿r候到頭呢?默認(rèn)的原型鏈結(jié)構(gòu)又是怎樣的呢?
凡是使用構(gòu)造函數(shù),并且沒有利用賦值方法修改原型的對象,則保留默認(rèn)的原型鏈,該原型鏈通過 proto 一直向上訪問必須最終到頭,返回值 null。注意,這里說的是原型的值為null,需要與之前的屬性查找原則所說的沒有該屬性返回的是undefined區(qū)分開來。
以一個簡單的構(gòu)造函數(shù)為例,演示默認(rèn)的原型鏈結(jié)構(gòu):
function Person(){} var p = new Person(); 當(dāng)前實例對象 -> Person.prototype -> Object.prototype -> nll 可以在Google瀏覽器調(diào)試工具中查看什么是原型式繼承
通過修改(增加、刪除等)原型鏈結(jié)構(gòu),使得實例對象具有原型鏈上的所有方法
函數(shù)的原型鏈上面講的是對象的原型鏈,那函數(shù)的原型鏈呢?
1、函數(shù)的構(gòu)造函數(shù)
在js中,使用Function可以實例化函數(shù)對象,也就是說在js中,函數(shù)與普通對象一樣,也是一個對象類型,所以函數(shù)可以
使用對象的動態(tài)特性
用構(gòu)造函數(shù)創(chuàng)建函數(shù)
創(chuàng)建其他對象
唯一可以限定變量作用域的結(jié)果
2、Function的實例代碼
var foo = new Function("參數(shù)一", "參數(shù)二", "..."); Function的參數(shù)全是字符串,它是將參數(shù)連接起來的函數(shù) 沒有參數(shù),表示空函數(shù); 只有一個參數(shù),表示函數(shù)體; 有N個參數(shù),最后一個表示函數(shù)體,前面所有的都表示函數(shù)體的參數(shù);
綜上,new Function 在功能上與普通函數(shù)并無二意。從下面的代碼,也可以看出。
function foo(a, b){ var sum = a + b; return sum; } var foo = new Function("a", "b", "var sum = a + b; return sum;");
3、函數(shù)的原型鏈
任何函數(shù)都是Function的實例,所以函數(shù)可以通過__proto__訪問到其原型(Function.prototype)。原型也是一個對象,繼承自O(shè)bject.prototype。當(dāng)前的原型鏈結(jié)構(gòu)為:
fn -> Function.prototype -> Object.prototype -> null
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/100105.html
摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街?,對象則是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長期以來人們對這一門語言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣鳌1疚膶⒒貧w面向?qū)ο蟊疽?,從對語言感悟的角度闡述為什...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:基于原型的面向?qū)ο笤诨谠偷恼Z言中如并不存在這種區(qū)別它只有對象不論是構(gòu)造函數(shù),實例,原型本身都是對象。允許動態(tài)地向單個的對象或者整個對象集中添加或移除屬性。為了解決以上兩個問題,提供了構(gòu)造函數(shù)創(chuàng)建對象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識面向?qū)ο?1. JavaScript...
摘要:基于原型的面向?qū)ο笤诨谠偷恼Z言中如并不存在這種區(qū)別它只有對象不論是構(gòu)造函數(shù),實例,原型本身都是對象。允許動態(tài)地向單個的對象或者整個對象集中添加或移除屬性。為了解決以上兩個問題,提供了構(gòu)造函數(shù)創(chuàng)建對象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識面向?qū)ο?1. JavaScript...
閱讀 2617·2023-04-26 00:57
閱讀 971·2021-11-25 09:43
閱讀 2282·2021-11-11 16:55
閱讀 2358·2019-08-30 15:53
閱讀 3651·2019-08-30 15:52
閱讀 1526·2019-08-30 14:10
閱讀 3435·2019-08-30 13:22
閱讀 1262·2019-08-29 11:18