深入理解 JavaScript Prototype 污染攻击
1、prototype和__proto__分别是什么?
JavaScript中,我们如果要定义一个类,需要以定义“构造函数”的方式来定义:
12345function Foo() { this.bar = 1}new Foo()
Foo函数的内容,就是Foo类的构造函数,而this.bar就是Foo类的一个属性。
为了简化编写JavaScript代码,ECMAScript 6后增加了class语法,但class其实只是一个语法糖。
一个类必然有一些方法,类似属性this.bar,我们也可以将方法定义在构造函数内部:
12345678function Foo() { this.bar = 1 this.show = function() { console.log(this.bar) }}(new Foo()).show()
但这样写有一个问题,就是每当我们新建一个Foo对象时,this.show = function...就 ...