原型以及原型鏈的學習隨筆

2021-09-27 13:30:39 字數 2664 閱讀 8040

一 原型: 

1 定義:原型是function對像的乙個屬性,他定義了建構函式製造出的物件的公共祖先;

通過該建構函式產生的物件,可以繼承該原型的屬性和方法。

原型也是對像。prototype;

person.prototype.name = 'jams';

function person()

var person = new person();

當列印:console.log(person.name)時,會先從函式中找看下有沒有這個屬性值,如果沒有就去原型prototype中找;

因此,這時候列印出來的值為:jams 

prototype 是函式物件預設的屬性,可以增刪改查; 

2 利用原型特點和概念,可以提取共有屬性;

3物件如何檢視原型——>隱式屬性:__proto__

__proto__ 中存放的就是建構函式的原型

相當於:在函式中隱藏了一段**: var  this =  

舉個例子:

var obj =

var obj1 = obj;

obj =

console.log(obj1.name);// 輸出的值為 a 

console.log(obj.name);// 輸出的值為 b 

對比:var obj =

var obj1 = obj;

obj.name ='b'

console.log(obj1.name);// 輸出的值為 b 

console.log(obj.name);// 輸出的值為 b 

原因: 當你修改obj.name 時,修改的是原型中的值,當你重新附值給obj時(obj=),相當於重新定義了obj這個變數;

換個理解方式為,obj.name 是乙個指標,而obj 是乙個變數; 

4 物件如何檢視物件的建構函式:constructor;

constructor 是預設自帶的乙個屬性,他的值指向原函式;

二 原型鏈: 

1如何構成原型鏈: 一級一級往上找;

舉個栗子: 

grand.prototype.lastname = 'a';

function grand() 

var grand = new grand();

father.prototype = grand;

function father()  

var father = new father(); 

son.prototype = father;

function son()

var son = new son(); 

console.log( son.name );  // b

console.log(son.lastname); // a

2 原型鏈上屬性的增刪改查:跟原型上的增刪改查基本一致,其中刪除:delete 只能通過原型prototype 才能刪除原型的值;

person.prototype =  

}function person() 

var person = new person();

sayname 裡面的this指向是,誰呼叫的這個方法,this指向誰;

所以最終結果person.sayname() 的值為b

而person.prototype.sayname() 的值為a 

3絕大多數物件的最終都會繼承自object.prototype

但不是所有的物件都可以繼承,特例:object.creat()原型;

例如:object.creat(null) ,該物件沒有prototype原型;

4原型鏈的重寫:

例如常見的如下原型鏈就是經常被重寫試用的,當然自己定義的原型同樣也是可以被重寫 

object.prototype.tostring

number.prototype.tostring

array.prototype.tostring

boolean.prototype.tostring

string.prototype.tostring 

(題外話:js 有個小bug:

控制台運算:0.14*100,去看下運算結果: 14.000000000000002  這是js精度不准問題導致的;

解決方法:小數先乘以100然後向下取整或向上取整。如果利用保留兩位有效數字的方法tofixed()再乘以100是不準確的;

math.random() 會產生乙個(0,1)的隨機數 

tofixed() 保留兩位有效數字 

math.tofloor() 向下取整

math.toceil() 向上取整; 

var num =math.tofloor(math.random()*1000);  // 獲取0-100的隨機數;

可以借助別人的函式實現自己的功能 

call 可以該錶this指向

例如:function person(name,age)

person.call(obj, 'b' ,300);

執行結果:obj

這樣的好處,借用person的方法來封裝了obj; 

例如:function person(name,age,***)

更多專業前端知識,請上

【猿2048】www.mk2048.com

JavaScript原型以及原型鏈

原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...

JS 原型以及原型鏈

原型煉圖 點選此處放大 原型物件 無論什麼時,只要建立乙個新函式,就會根據一組特定的規則為該函式建立乙個 prototype 屬性 這個屬性指向該函式的原型物件。預設情況下,所有原型物件都會自動獲得乙個 constructor 建構函式 屬性,這個屬性包含乙個指向 prototype 屬性所在函式的...

原型以及原型鏈的理解

借用大佬的話就是萬物皆可為物件,但是物件如此之多,每個物件都要寫共有的方法麼,客觀上看我覺得這種事情也不可能,這時候就需要乙個類似於倉庫的東西,如果你手裡有就用你的,如果沒有就去找倉庫的,你可以在有使用想法的時候,提前準備放到倉庫裡,等使用的時候再去倉庫呼叫。接下來說的就是把這個倉庫對應到那個原型物...