日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

原型与原型链的简单理解

發布時間:2025/3/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原型与原型链的简单理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javascript的原型鏈有顯式和隱式兩種:

顯式原型鏈:即我們常見的prototype; 隱式原型鏈:在一般環境下無法訪問,即不可見,在FireFox下可以通過__proto__方式訪問;隱式原型鏈用于javascript引擎內部對原型鏈的搜尋,通過顯示原型鏈來設置;

一、prototype和__proto__的概念

  prototype是函數的一個屬性(每個函數都有一個prototype屬性),這個屬性是一個指針,指向一個對象。它是顯示修改對象的原型的屬性。

  __proto__是一個對象擁有的內置屬性(請注意:prototype是函數的內置屬性,__proto__是對象的內置屬性),是JS內部使用尋找原型鏈的屬性。

? ? ? 用chrome和FF都可以訪問到對象的__proto__屬性,IE不可以。

二、new 的過程 var Person = function(){}; var p = new Person();

? ?new的過程拆分成以下三步:
? ?(1) var p={}; 也就是說,初始化一個對象p
? ?(2) p.__proto__ = Person.prototype;
? ?(3) Person.call(p); 也就是說構造p,也可以稱之為初始化p

關鍵在于第二步,我們來證明一下:

var Person = function(){}; var p = new Person(); alert(p.__proto__ === Person.prototype);

? ? 這段代碼會返回true。說明我們步驟2是正確的。

?

三、示例

var Person = function(){};Person.prototype.sayName = function() {alert("My Name is Jacky");};Person.prototype.age = 27;var p = new Person();p.sayName();

p是一個引用指向Person的對象。我們在Person的原型上定義了一個sayName方法和age屬性,當我們執行p.age時,會先在this的內部查找(也就是構造函數內部),如果沒有找到然后再沿著原型鏈向上追溯。

這里的向上追溯是怎么向上的呢?這里就要使用__proto__屬性來鏈接到原型(也就是Person.prototype)進行查找。最終在原型上找到了age屬性。

轉載于:https://www.cnblogs.com/shj-com/p/11165918.html

總結

以上是生活随笔為你收集整理的原型与原型链的简单理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。