js原型鏈汙染學習

2022-09-22 05:06:11 字數 1150 閱讀 3672

早有耳聞,一直沒來看js這方面的內容,現在終於把它學了一下

prototype、__proto__和constructor

舉例幫助理解

通過函式test建立物件test1

function

test()

test1 = new test();

在js中,所有的物件都是從基礎物件繼承下來的,所以每個物件都有其原型物件

建構函式的prototype即為其原型物件

在例項化出來的物件中可以通過__proto__來得到其建構函式的原型物件,即

test.prototype=test1.__proto_
類似的,物件的constructor指向它的建構函式,即

test1.constructor == test()
如果物件是自變數定義的話其constructor為function object()

prototype為函式獨有,所有物件都有__proto__和constructor,同時函式本身也是物件

原型鏈的原理

有點python裡ssti那味兒

原型鏈汙染

攻擊者控制乙個物件的原型,就可以通過其影響和其來自同類、同父祖類的物件

接上面的例子,此時輸出test1.a為1,test1.b為undefined(這裡定址也可以用test1['a'])

令其原型物件的b為2

test.prototype.b="2"
此時輸出test1.b為2

同理,定義

test.__proto__.c="3"
此時輸出test1.c為3

順著鍊子往上進行修改,也可以通過其影響到自變數定義出來的物件,如

test.__proto__.__proto__.d=4let obj = {}
此時obj.d為4

原理理解了

JS原型鏈學習筆記

animal擁有name屬性和laugh方法 dog 繼承 animal jiwawa 吉娃娃 是dog 的例項 1,錯誤,dog只是animal的例項,不是繼承自它的後嗣 1 function animal name 4 5var dog new animal dog 6console.log d...

JS 物件 JS原型 原型鏈

參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...

js 原型與原型鏈

5條原型規則 1.所有的引用型別 陣列 物件 函式 都具有物件特性,即可自由擴充套件屬性 除了 null 除外 2.所有的引用型別 陣列 物件 函式 都有乙個 proto 隱式原型 屬性,屬性值是乙個普通的物件。3.所有的函式,都有乙個prototype 顯式原型 屬性,屬性值也是乙個普通的物件。4...