摘要:原型的作用通過構(gòu)造函數(shù)創(chuàng)建的對(duì)象,可以使用原型上的屬性和方法,即原型可以讓實(shí)例共享它的方法和屬性。
1、什么是原型?
原型是函數(shù)自帶的一個(gè)屬性prototype,該屬性的值指向一個(gè)對(duì)象 ( 因?yàn)榇娴氖菍?duì)象的指針 )。
2、原型的作用通過構(gòu)造函數(shù)創(chuàng)建的對(duì)象,可以使用原型上的屬性和方法,即原型可以讓實(shí)例共享它的方法和屬性。
function Car(brand) { this.brand = brand; } // 原型 Car.prototype.drive = function() { console.log("開車"); } // 創(chuàng)建對(duì)象(實(shí)例) var x3 = new Car("BMW"); var glc300 = new Car("Benz"); // 兩個(gè)實(shí)例都可以訪問原型上的方法 x3.drive(); glc300.drive();3、prototype
函數(shù)默認(rèn)就有的屬性,這個(gè)屬性指向原型(原型對(duì)象)。
4、__proto__對(duì)象默認(rèn)就有的屬性,這個(gè)屬性也指向原型(原型對(duì)象)。
5、原型的稱呼問題prototype 這個(gè)屬性, 我們稱之為原型屬性, 或者顯示原型
.__proto__ 這個(gè)屬性, 我們稱之為原型對(duì)象, 或者隱式原型
它們兩個(gè)是不同的屬性
prototype是函數(shù)的屬性,它存的是對(duì)象的指針,指向原型對(duì)象
函數(shù)中prototype的作用:
將來創(chuàng)建的實(shí)例對(duì)象的__proto__屬性會(huì)根據(jù)構(gòu)造函數(shù)的prototype屬性來定義。
__proto__是對(duì)象的屬性,它也指向原型
對(duì)象中__proto__的作用:
對(duì)象可以訪問__proto__屬性所指向的那個(gè)原型對(duì)象中的屬性和方法
7、constructor所有原生的原型都有這個(gè)屬性,該屬性的值存的是構(gòu)造函數(shù)的指針(地址)
因?yàn)闃?gòu)造函數(shù).prototype 的值可以被改變,所以修改之后就不是原生原型了。
function Car(brand) { this.brand = brand; } // 原型 Car.prototype.drive = function() { console.log("開車"); } // 創(chuàng)建對(duì)象(實(shí)例) var x3 = new Car("BMW"); // 可以獲取對(duì)象的具體類型 console.log(x3.constructor.name); // 輸出Car // 動(dòng)態(tài)修改原型的屬性, 盡量不要這么干, 最好一次性在最初就定義好 Car.prototype.drive = function() { console.log("飚車"); }8、原型鏈
javascript中的對(duì)象都有一個(gè)內(nèi)置的proto屬性,這個(gè)屬性指向創(chuàng)建該對(duì)象的構(gòu)造函數(shù)的prototype(Fucntion.prototype-原型對(duì)象),這個(gè)原型對(duì)象也是對(duì)象,也會(huì)有自己的proto,指向它自己的原型對(duì)象,這樣直到某個(gè)對(duì)象的原型為null為止,這樣的一級(jí)一級(jí)的鏈結(jié)構(gòu)就稱為原型鏈。
// 實(shí)例對(duì)象f的原型 指向 原型對(duì)象F.prototype f.__proto__ => F.prototype, // 原型對(duì)象F.prototype的原型 指向 原型對(duì)象Object.prototype F.prototype.__proto__ => Object.prototype, // 原型對(duì)象Object.prototype的原型 指向 null Object.prototype.__proto__ => null
原型鏈的作用就是用來實(shí)現(xiàn)繼承(繼承:對(duì)象可以使用不屬于自己的屬性或者方法);
當(dāng)訪問一個(gè)對(duì)象的屬性或者方法時(shí),首先會(huì)在對(duì)象的自身查找,
如果沒有,則根據(jù)該對(duì)象的proto屬性的指向,到該對(duì)象的原型對(duì)象上查找,
如果還沒有找到,就再根據(jù)原型對(duì)象的proto去查找,一直到Object.prototype為止。
舉個(gè)栗子
var arr = []; console.log(arr.hasOwnProperty("push")); // false console.log(Array.hasOwnProperty("push")); // false console.log(Array.prototype.hasOwnProperty("push")); // true console.log(arr.push === Array.prototype.push); // true 比如我們創(chuàng)建一個(gè)數(shù)組, 數(shù)組arr本身是沒有push方法的, push方法就是從數(shù)組的原型對(duì)象上繼承而來的.
最后是一張?jiān)?繼承結(jié)構(gòu)的圖
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80626.html
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:一般我們對(duì)這種構(gòu)造函數(shù)命名都會(huì)采用,并把它稱呼為類,這不僅是為了跟的理念保持一致,也是因?yàn)榈膬?nèi)建類也是這種命名。由生成的對(duì)象,其是。這是標(biāo)準(zhǔn)的規(guī)定。本文的主題是原型系統(tǒng)的變遷,所以并沒有涉及和對(duì)原型鏈的影響。 概述 JavaScript 的原型系統(tǒng)是最初就有的語言設(shè)計(jì)。但隨著 ES 標(biāo)準(zhǔn)的進(jìn)化和新特性的添加。它也一直在不停進(jìn)化。這篇文章的目的就是梳理一下早期到 ES5 和現(xiàn)在 ES6,...
摘要:為了防止之后自己又開始模糊,所以自己來總結(jié)一下中關(guān)于作用域鏈和原型鏈的知識(shí),并將二者相比較看待進(jìn)一步加深理解。因此我們發(fā)現(xiàn)當(dāng)多個(gè)作用域相互嵌套的時(shí)候,就形成了作用域鏈。原型鏈原型說完了作用域鏈,我們來講講原型鏈。 畢業(yè)也整整一年了,看著很多學(xué)弟都畢業(yè)了,忽然心中頗有感慨,時(shí)間一去不復(fù)還呀。記得從去年這個(gè)時(shí)候接觸到JavaScript,從一開始就很喜歡這門語言,當(dāng)時(shí)迷迷糊糊看完了《J...
摘要:所以,當(dāng)我們使用時(shí),不能進(jìn)行復(fù)雜數(shù)據(jù)類型的判斷,因?yàn)樗{(diào)用的是,雖然也繼承自,但在上重寫了,而我們通過實(shí)際上是通過原型鏈調(diào)用了。 關(guān)于 toString 方法在有關(guān)js的開發(fā)中使用應(yīng)該是相當(dāng)廣泛的,這兩天在看jQuery的源碼,從 toString 本身了解與鞏固了不少知識(shí),寫出來與大家一同分享。首先先上一段代碼: var arr=[1,2,3]; toString.call(arr)...
閱讀 2158·2023-04-25 20:45
閱讀 1068·2021-09-22 15:13
閱讀 3642·2021-09-04 16:48
閱讀 2580·2019-08-30 15:53
閱讀 928·2019-08-30 15:44
閱讀 936·2019-08-30 15:43
閱讀 1002·2019-08-29 16:33
閱讀 3432·2019-08-29 13:08