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