当前位置: 首页 > news >正文

XSS原型与原型链

概念说明

prototype和__proto__均为函数中的一种属性,区别在于prototype是构造函数的属性,用于定义实例共享的属性和方法,__proto__是实例的属性,指向创建它的构造函数的prototype

function Animal(type) {this.type = type;
}// 为构造函数的prototype添加方法
Animal.prototype.speak = function() {console.log(`I'm a ${this.type}`);
};// 创建实例
const dog = new Animal('dog');
const cat = new Animal('cat');// 验证实例的__proto__指向构造函数的prototype
console.log(dog.__proto__ === Animal.prototype);       // true
console.log(cat.__proto__ === Animal.prototype);       // true// 验证构造函数的prototype.constructor指向自身
console.log(Animal.prototype.constructor === Animal);  // true// 实例继承的方法来自prototype
console.log(dog.speak === Animal.prototype.speak);     // true
console.log(cat.speak === Animal.prototype.speak);     // true

原型链的层级结构

const bird = new Animal('bird');// 验证原型链的层级
console.log(bird.__proto__ === Animal.prototype);              // true
console.log(Animal.prototype.__proto__ === Object.prototype);   // true
console.log(Object.prototype.__proto__ === null);               // true(原型链终点)// 通过原型链访问Object的方法
console.log(bird.toString === Object.prototype.toString);       // true
console.log(bird.hasOwnProperty === Object.prototype.hasOwnProperty); // true

改原型对实例的影响

function Fruit(name) {this.name = name;
}const apple = new Fruit('apple');
const banana = new Fruit('banana');// 修改原型前
console.log(apple.color); // undefined// 向原型添加属性
Fruit.prototype.color = 'unknown';// 验证所有实例继承新属性
console.log(apple.color); 
console.log(banana.color); 
console.log(apple.color === Fruit.prototype.color); // true

http://www.xdnf.cn/news/1150489.html

相关文章:

  • 告别项目混乱:基于 pnpm + Turborepo 的现代化 Monorepo 工程化最佳实践
  • C++控制台贪吃蛇开发:从0到1绘制游戏世界
  • Git 完全手册:从入门到团队协作实战(2)
  • GaussDB union 的用法
  • Maven 依赖管理
  • Java从入门到精通:全面学习路线指南
  • uniapp props、$ref、$emit、$parent、$child、$on
  • MySQL练习3
  • 【橘子分布式】gRPC(编程篇-中)
  • 《Origin画百图》之多分类矩阵散点图
  • 从零开始学Tailwind CSS : 颜色配置原理与实践
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • 93.数字信号处理相关的一些问题
  • 发明专利怎么写,与学术文章异同点与注意事项
  • 月舟科技近调记录
  • Python+ArcGIS+AI蒸散发与GPP估算|Penman-Monteith模型|FLUXNET数据处理|多源产品融合|专业科研绘图与可视化等
  • 实验-华为综合
  • Visual Studio Code(VSCode)中设置中文界面
  • 【Python库包】Gurobi-Optimize (求解 MIP) 安装
  • GATE:基于移动嵌入式设备的实时边缘构建图注意力神经网络用于鲁棒室内定位
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • 【数据结构】二叉树初阶详解(一):树与二叉树基础 + 堆结构全解析
  • 计算机网络:(十)虚拟专用网 VPN 和网络地址转换 NAT
  • 智能体之变:深度解析OpenAI ChatGPT Agent如何重塑人机协作的未来
  • 【Linux】基本指令
  • c++——友元函数
  • Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>
  • Android无需授权直接访问Android/data目录漏洞
  • K8s与Helm实战:从入门到精通
  • MySQL数据丢失救援办法