您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關什么是js的prototype,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Javascript也是面向對象的語言,但它是一種基于原型Prototype的語言,而不是基于類的語言。
在javaScript創建對象一文中提到過:用構造函數創建對象存在一個問題即同一構造函數的不同實例的相同方法是不一樣的,所以我們用原型把構造函數中公共的屬性和方法提取出來進行封裝,達到讓所有實例共享的目的。
function定義的對象有一個prototype屬性,prototype屬性又指向了一個prototype對象。在prototype對象中有一個constructor屬性,這個constructor屬性同樣指向一個constructor對象,而這個constructor對象恰恰就是這個function函數本身。
用偽代碼表示如下:
var function{ prototype:prototype{ constructor:constructor == function } }
函數與原型的關系
js中創建一個函數,就會自動創建一個prototype屬性,這個屬性指向函數的原型對象,并且原型對象會自動獲得一個constructor(構造函數)屬性,指向該函數。
舉例:以前面的原型模式創建對象為例說明
<script type="text/javascript"> function Person(){ } Person.prototype.name="lxy"; Person.prototype.age=22; Person.prototype.job="Software Engineer"; Person.prototype.sayName=function(){ alert(this.name); } var lxy=new Person(); lxy.sayName(); var personA=new Person(); personA.sayName(); alert(lxy.sayName()==personA.sayName());//true </script>
實例與原型的關系
通過構造函數創建一個實例,該實例內部將包含一個屬性(指針),指向構造函數的原型對象。
舉例:Person構造函數的實例Person1和Person2的[[Prototype]]屬性都指向Person的原型。
Note:[[Prototype]]連接是存在于實例和構造函數的原型之間,而不是存在實例與構造函數之間。
關于這個指針,ECMA-262中叫[[Prototype]],沒有標準的方式訪問[[Prototype]],但Firefox、Safari和Chrome在每個對象上都支持一個屬性__protp__,而在其他實現中,這個屬性對腳本不可見。
關于什么是js的prototype就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。