摘要:我們知道,調用構造函數時會為實例添加一個指向最初原型的指針,而把原型修改為另外一個對象就等于切斷了構造函數與最初原型之間的聯系。
我們知道,調用構造函數時會為實例添加一個指向最初原型的指針,而把原型修改為另外一個對象就等于切斷了構造函數與最初原型之間的聯系。
怎么理解這句話,下面我們通過實例來解釋下,如有不對,請指正,虛心受教。
function Person(){ } Person.prototype.sayName=function(){ alert("TONY"); } var friend1=new Person(); var keys1=Object.keys(Person.prototype); //重寫原型 Person.prototype = { constructor:Person, name:"TIMY", age:29, job:"SOFT ENGINEER", sayName:function(){ alert(this.name); } }; var friend2=new Person(); var keys2=Object.keys(Person.prototype); friend1.sayName(); //TONY friend2.sayName(); //TIMY alert(keys1); //sayName alert(keys2); //constructor,name,age,job,sayName
為什么friend1和friend2輸出的結果不同,因為friend1時還沒有重寫,friend2時已經重寫原型。
那么問題來了,這中間指針是怎么指向的?
因為在實例化的時候,firend1的原型指針指向了構造函數的原型對象,這個的原型對象只有一個sayName方法,輸出的是TONY。
隨后,給構造函數附上了新的原型對象,即將構造函數指向新的原型對象,但是實例friend1的原型指針依然還傻傻的指向原來的空原型對象{}
這個時候再實例化的對象friend2,就有了新的原型的sayName方法了,輸出是TIMY。
其實通過Object.keys(Person.prototype)語句就看出了不同情況下原型的所有屬性和方法。
重寫前指向的是最初原型,只有一個sayName方法,重寫后,構造函數就指向了新的原型,雖然新的原型也有sayName方法,但是注意,這已經不是之前的了,只是名字相同而已。
就醬紫滴,還在學習中。。。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85699.html
摘要:先來說其實構造函數也有,原型對象有,實例有也有,或者更加籠統的說,所有對象都是有的。構造函數的原型對象上的會指向構造函數。由于屬性是可以變更的,所以未必真的指向對象的構造函數,只是一個提示。 續上一集內容,通過構造函數的方式,成功地更新了生產技術,老板笑呵呵,工人少奔波,只是問題總比辦法多,又遇到一個新問題,就是會造成一些資源的重復和浪費,那么經過工程師們的智慧交流,他們產生了一個新技...
摘要:像和這樣的原生構造函數,在運行時會自動出現在執行環境中。理解原型對象在默認情況下,所有原型對象都會自動獲得一個構造函數屬性,這個屬性包含一個指向屬性所在函數的指針。而通過這個構造函數,我們還可繼續為原型對象添加其他屬性和方法。 原型鏈是一種機制,指的是 JavaScript 每個對象都有一個內置的 __proto__ 屬性指向創建它的構造函數的 prototype(原型)屬性。原型鏈的...
摘要:高程第六章繼承理解與實踐昨日細細的讀了一遍高程現在寫篇文章來鞏固下認知吧讀首先是從中讀到了什么我自己也在讀書的時候用筆記下了各個部分的點現在等于閱讀筆記回憶下書本理解基礎第五版中規定了兩種屬性數據屬性訪問器屬性數據屬性包含一個數據值的位 JavaScript高程第六章:繼承-理解與實踐昨日細細的讀了一遍JavaScript高程,現在寫篇文章來鞏固下認知吧. 讀 首先是從中讀到了什么,我...
摘要:簡單回顧一下構造函數原型和實例對象之間的關系每個構造函數都有一個原型對象。找到生成構造函數的原型對象的構造函數,搜索其原型對象,找到了。 JS面向對象的程序設計之繼承的實現 - 原型鏈 前言:最近在細讀Javascript高級程序設計,對于我而言,中文版,書中很多地方翻譯的差強人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯誤,會非常感謝您的指出。文中絕大部分內容引用自《JavaS...
摘要:創建對象兩個基本方法創建對象最基本的兩個方法是構造函數和對象字面量。當調用構造函數創建一個新的實例對象后,該實例內部會有一個指針指向構造函數的原型對象。碼農構造函數在不返回值的情況下,默認會返回新對象實例。 前言:本文主要總結一下javascript創建對象的方法、原型、原型鏈和繼承,但是先從創建對象的幾種方法開始,延伸到原型模式創建對象以及其它模式。繼承本來想一塊寫了,發現太多內容了...
閱讀 1156·2023-04-25 17:28
閱讀 3531·2021-10-14 09:43
閱讀 3955·2021-10-09 10:02
閱讀 1943·2019-08-30 14:04
閱讀 3129·2019-08-30 13:09
閱讀 3270·2019-08-30 12:53
閱讀 2896·2019-08-29 17:11
閱讀 1823·2019-08-29 16:58