原型prototype
????????今天給大家淺淺的總結(jié)一下學(xué)到的prototype與__proto__;后面的問題總結(jié)是在B站看了一個學(xué)習(xí)視頻,照著老師總結(jié)下來的,眼熟的友友們請直接拿走不謝~~
????????prototype 概念:每一個構(gòu)造函數(shù)天生自帶一個屬性為?prototype 對象,是一個對象數(shù)據(jù)類型,里面可以存放對應(yīng)的數(shù)據(jù) 稱為顯示原型?且唯一
????????一般把方法放在原型里,屬性放在構(gòu)造函數(shù)里
????????當自定義構(gòu)造函數(shù)書寫完畢后,就會有 prototype 產(chǎn)生
????????__proto__ 概念:每一個對象天生自帶一個__proto__屬性,也是一個對象空間,指向?qū)ο笏鶎贅?gòu)造函數(shù)的prototype,稱為隱式原型
function Person() {Person.prototype.a = 100;Person.prototype.say = function(){console.log("hello");} } ? var p1 = new Person(); ? //person找不到a,則會去構(gòu)造函數(shù)的prototype里找 console.log(p1.a); //100 p1.say(); // hello ? console.log(Person.prototype); //判斷一個對象是否指向了該構(gòu)造函數(shù)的原型對象 console.log(Person.prototype.isPrototypeOf(p1));// true ? //創(chuàng)建的對象的自帶屬性__proto__ 指向構(gòu)造函數(shù)的 prototype對象 console.log(p1.__proto__); ? //指向的意思就是說是同一個東西 console.log(p1.__proto__ == Person.prototype); //true console.log(p1.__proto__ === Person.prototype); //true總結(jié)
-
實例對象的__proto__是指向?qū)?yīng)構(gòu)造函數(shù)的prototype
-
在實際使用中,一般不會使用?__proto__,而是通過?__proto__訪問對應(yīng)的prototype
問題1:實例對象的?__proto__?指向誰?
=> 指向所屬構(gòu)造函數(shù)的 prototype
=> p1 所屬的構(gòu)造函數(shù)是 Person
=> p1.__proto__?指向 Person.prototype
問題2:(構(gòu)造函數(shù))Person.prototype 的?__proto__?指向誰?
=> Person.prototype 是一個對象數(shù)據(jù)類型( Object )
=> 在 JS 內(nèi)所有的 object 數(shù)據(jù)類型都是屬于 Object 這個內(nèi)置構(gòu)造函數(shù)的
=> 所以 Person.prototype 屬于 Object 這個內(nèi)置構(gòu)造函數(shù)
=> 所以 Person.prototype 的?__proto__?指向 Object.prototype
問題3:(構(gòu)造函數(shù))Person 的?__proto__?指向誰?
=> Person 是一個函數(shù),函數(shù)本身也是一個對象,所以也有?__proto__
=> 如果Person 有父類,則指向父類的原型prototype
=> 在 JS 內(nèi),所有函數(shù)都是屬于內(nèi)置構(gòu)造函數(shù) Function 的實例
=> 所以 Person.__proto__?指向 Function.prototype
問題4:Object.prototype 的?__proto__?指向誰?
=> Object.prototype 是一個對象數(shù)據(jù)類型,只要是對象,都是屬于 Object 這個內(nèi)置構(gòu)造函數(shù)的
=>?注意:Object.prototype 在 JS 內(nèi)叫做頂級原型,不在有?__proto`__`,指向null
問題5:Object 的?__proto__?指向誰?
=> Object 是一個內(nèi)置構(gòu)造函數(shù),也是一個函數(shù),也是一個對象
=> 在 JS 內(nèi),所有的函數(shù)都是屬于內(nèi)置構(gòu)造函數(shù) Function 的實例
=> Object 也是 Function 的實例
=> 所以O(shè)bject.__proto__?指向 Function.prototype
問題6:Function.prototype 的?__proto__?指向誰?
=> Function.prototype 也是一個對象數(shù)據(jù)類型
=> 只要是對象數(shù)據(jù)類型都是 Object 的實例
=> 所以 Function.prototype 的?__proto__?指向 Object.prototype
問題7:Function 的?__proto__?指向誰?
=> Function 也是一個內(nèi)置構(gòu)造函數(shù),也是一個函數(shù)
=> 在 JS 內(nèi),所有的函數(shù)都是屬于內(nèi)置構(gòu)造函數(shù) Function 的實例
=> Function 是 自己的構(gòu)造函數(shù),自己的實例對象
=> 所以 Function 所屬的構(gòu)造函數(shù)時Function
=> 所以 Function.__proto__?指向 Function.prototype
總結(jié)
以上是生活随笔為你收集整理的原型prototype的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目管理之如何控制项目进度和质量
- 下一篇: 2021Java面经:mysql下载教程