摘要:最近了解了一下與簡單的說它就是一個屬性且屬性的值為地址,指向一個對象。而它通常為函數的屬性。那指向誰呢構造函數是的實例所以的判斷沿著原型鏈不斷的向上查找分別判斷是否與相等
最近了解了一下__proto__與prototype:
prototype:
1.簡單的說它就是一個屬性且屬性的值為地址,指向一個對象。
而它通常為函數的屬性。
2.它主要用來共享屬性和方法(常用于構造函數創建實例對象給實例對象共享屬性)
3.主要用來被訪問
4.判斷自有屬性和原型屬性 一般用hasOwnProperty()
function Person(name){ this.name = name; } typeof(Person.prototype) //"object" Person.prototype.publicData = "test" Person.privateData = "test1" Person.hasOwnProperty("privateData") //true Person.hasOwnProperty("publicData") //false var bob = new Person("bob") var mary = new Person("mary") //bob和mary共享publicData屬性
__proto__:
1.基本所有的對象有該屬性
2.用來構建原型鏈訪問構造方法中的顯示原型
如何訪問?
var arr = new Array() arr.__proto__ === Array.prototype //true arr.push(1) arr.hasOwnProperty("push")//false "push" in arr//true
以上代碼:Array是arr的構造函數,arr的隱式原型指向Array的顯示原型,arr中并無push的方法,卻能調用到push這個方法
這里的push方法調用的是Array.prototype中的方法
理論上原型鏈可以無限長
function Foo(){} function Bar(){} Foo.prototype = new Bar()
此時Foo繼承了Bar: Foo的實例在訪問原型鏈的時候先訪問Foo的顯示原型在訪問Bar的顯示原型
Foo.prototype = {}
當然我們可以手動修改Foo的繼承,以上兩種方法重寫了Foo.prototype,所以Foo.prototype.constructor也跟著改變了。
那Foo.__proto__指向誰呢? 構造函數是Function的實例 所以Foo.__proto__ === Function.prototype
instanceof的判斷:
function Foo(){} Foo instanceof Function Foo.__proto__.__proto__ ..... === Function.prototype?
Foo沿著原型鏈不斷的向上查找 分別判斷是否與Function.prototype相等
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94053.html
摘要:屬性這是每個對象都有的隱式原型屬性,指向了創建該對象的構造函數的原型。 原型 在JavaScript中,有兩個原型,分別是 prototype 和 _proto_注:在ECMA-262第5版中管這個 _proto_ 叫 [[Prototype]] prototype 屬性:這是一個顯式原型屬性,只有函數才擁有該屬性。_proto_ 屬性:這是每個對象都有的隱式原型屬性,指向了創建該對象...
摘要:首先,先介紹一個今天的主角隱式原型與顯式原型什么是和顯式原型在每一個函數請注意是函數創建之后都會有一個叫的屬性,這個屬性指向的是函數的原型對象。最后總結一下對象有屬性指向該對象的構造函數的原型對象。 首先,先介紹一個今天的主角:proto(隱式原型)與prototype(顯式原型) 什么是__proto__和prototype? prototype(顯式原型)在每一個函數(請注意是函數...
摘要:在這篇文章中,他介紹了一種實現繼承的方法,這種方法并沒有使用嚴格意義上的構造函數。的左值一般是一個對象,右值一般是一個構造函數,用來判斷左值是否是右值的實例。 __proto__ 探究 __proto__隱式原型與prototype顯式原型是個容易令人混淆的概念,簡而言之prototype是構造函數用來被自己的實例繼承的原型,而_proto_是實例用來繼承父類原型的載體。 1. 是什么...
摘要:寫在最前構造函數和原型模式的使用場景很廣泛,但因為對概念的混淆不清導致無法熟練掌握。換句話說,不必在構造函數中定義對象實例的信息,而是可以將這些信息直接添加到原型對象中,比如下面的方法。 寫在最前:構造函數和原型模式的使用場景很廣泛,但因為對概念的混淆不清導致無法熟練掌握。切圖帶你從代碼和流程圖一步步攻克,純干貨,建議收藏詳看,原型模式理解圖非常重要,務必多看幾遍! 前往查看demo源...
閱讀 1325·2023-04-26 00:10
閱讀 2428·2021-09-22 15:38
閱讀 3746·2021-09-22 15:13
閱讀 3503·2019-08-30 13:11
閱讀 646·2019-08-30 11:01
閱讀 3028·2019-08-29 14:20
閱讀 3208·2019-08-29 13:27
閱讀 1726·2019-08-29 11:33