91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript原型鏈是什么

發布時間:2022-03-04 14:08:36 來源:億速云 閱讀:156 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“JavaScript原型鏈是什么”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“JavaScript原型鏈是什么”這篇文章吧。

1、構造函數和實例

假設你聲明一個方法叫做Foo() ,那么我們可以通過new Foo()來聲明實例。

function Foo() {
      console.log("我是一個構造方法");
    }
    const f1 = new Foo();

現在你可以很清晰的明白Foo()是構造函數,f1是它的實例。

2、屬性Prototype

Foo()這個構造函數是一個方法。

方法也是對象數據類型,所以可以說方法是個對象。

對象就有屬性,不過方法有自己特殊的一個屬性,叫做prototype,其他對象沒有哦。

這個屬性會指向一個原型對象(Foo.prototype),而原型對象也會有一個自己的屬性叫做constructor,指向屬性包含了一個指針,指回原構造函數。

   function Foo() {
      console.log("我是一個構造方法");
    }
    const f1 = new Foo();

    console.log(Foo.prototype);//Foo的原型對象
    console.log(f1.prototype);//f1沒有 underfied

JavaScript原型鏈是什么

3、屬性__proto__

上文的prototype是給構造函數的所有實例提供共享方法和屬性的。

實例又是怎么訪問到共享方法和屬性的呢?

f1實例沒有prototype,而有一個屬性__proto__,這是所有對象都有的屬性,它指向到構造自己的構造函數的原型對象,然后js這個語言就是根據這個屬性來讓實例訪問到共享屬性和方法的

Foo是f1的構造函數,Foo.prototypeFoo的原型對象,所以f1.__proto__指向Foo.prototype

function Foo() {
      console.log("我是一個構造方法");
    }

    const f1 = new Foo();

    console.log(Foo.prototype);
    console.log(f1.__proto__);

JavaScript原型鏈是什么

4、訪問原型上的方法

Foo這個構造函數如果希望自己的實例能夠擁有同一個屬性,比如name,就在自己的原型對象上加上。

   function Foo() {
      console.log("我是一個方法");
    }

    Foo.prototype.name = "我是Foo創造的實例共享的屬性";

    const f1 = new Foo();
    const f2 = new Foo();

    console.log(f1.name);//我是Foo創造的實例共享的屬性
    console.log(f2.name);//我是Foo創造的實例共享的屬性

JavaScript原型鏈是什么

5、構造函數也有__proto__

上面說所有對象都有__proto__ ,Foo是函數也是對象啊,所以Foo.__proto__是啥呢?

那就去找Foo的構造函數是誰呢,Foo是一個函數,擁有函數特有的方法和屬性,創造的它的構造函數就是Function,這個js自帶的的一個構造函數,它的Function.prototype給所有js中你創建的函數提供函數自帶的一些公共方法和屬性。

所以Foo.__proto__指向Funtion.prototype

6、構造函數的原型也有__proto__

Foo.prototype也是對象,所以它也有__proto__。

每當我們要找__proto__,就得找它的構造函數,Foo.prototype是個對象,純對象,所以它的構造函數是Object,那么Object的原型就是Object.prototype。

Foo.prototype.__proto__指向Object.prototype

7、Object.prototype這個原型對象很特殊

ArrayStringFuntionObject這些構造函數都是函數,
都是Funtion構造函數的實例,
Array.__proto__String.__proto__Funtion.__proto__ Object.__proto__指向Funtion.prototype原型,
可以調用Funtion.prototype原型的一些公共方法,
例如都可以調用.name查看自己的函數名字。

Array.prototypeString.prototypeFuntion.prototype這些原型對象都是對象,
都是Object構造函數的實例,
Array.prototype.__proto__ String.prototype.__proto__Funtion.prototype.__proto__指向Object.prototype原型,
所以可以調用Object.prototype這個原型對象的公共方法,

Object.prototype有些特殊,它雖然是對象,但是并不是Object自己的實例,
Object.prototype.__proto__指向null,作為原型鏈的終點

8、總結

方法,也就是函數,才有prototype,就是方法的原型。
所以實例,一般都會有個對應的構造方法,也就是構造函數,實例的__proto__指向構造方法的原型。
js有很多自帶的構造方法,例如ArrayStringFuntionObject,都是根據js一些對象類型分配的,他們的原型上提供了許多封裝好的常用方法。
所有構造方法本身是函數,是Funtion這個js自帶構造函數的實例。
除了Object.prototype,所有構造方法的原型本身是對象,是Object這個js自帶構造函數的實例。
Object.prototype.__prototype指向null,作為原型鏈終點。

JavaScript原型鏈是什么

以上是“JavaScript原型鏈是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

恩平市| 阿巴嘎旗| 双柏县| 西华县| 科尔| 剑河县| 那曲县| 通城县| 大连市| 萨迦县| 胶州市| 方山县| 天柱县| 新巴尔虎左旗| 海兴县| 丹江口市| 崇文区| 綦江县| 定西市| 东至县| 美姑县| 眉山市| 宽甸| 青河县| 双城市| 遂川县| 广水市| 新安县| 巨野县| 巴彦县| 天镇县| 石林| 灵武市| 谢通门县| 全州县| 渝北区| 潍坊市| 兴和县| 扎鲁特旗| 建水县| 邓州市|