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