当前位置: 首页 > 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.dtcms.com/a/287874.html

相关文章:

  • Linux 常用命令详解(含目录结构 / 文件操作 / 查找 / 解压缩)- 新手入门教程
  • 接口测试工具
  • PDF发票批量打印工具哪个好?高效打印发票的实用工具推荐
  • LangGraph是一个基于图计算的大语言模型应用开发框架
  • 重学Framework Input模块:如何实现按键一键启动Activity-学员作业
  • 死锁的认识与处理
  • 使用 .NET 6.0 的简单 WebSocket 客户端和服务器应用程序
  • 基于GEE与哨兵2号的土地覆盖分类方法及实现
  • 137、真心话大冒险测谎器3.0
  • [故障诊断方向]基于二维时频图像和数据增强技术的轴承故障诊断模型
  • 家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌
  • Kotlin main函数
  • RabbitMQ—事务与消息分发
  • JUC并发包CountDownLatch减法计数器的使用实例(多线程)
  • Git 完全手册:从入门到团队协作实战(2)
  • 万字解析LVS集群
  • Pandas 30分钟
  • Mybatis:注解完成增删改查
  • steam游戏搬砖项目超完整版实操分享
  • 解惑LINQ中的SelectMany用法
  • 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
  • CCF编程能力等级认证GESP—C++8级—20250628
  • 【EMC设计基础--信号环路分析、PCB设计规则】
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭
  • Visual Studio Code(VSCode)中设置中文界面
  • 使用C#对象将WinRiver项目文件进行复杂的XML序列化和反序列化实例详解
  • STM32_Hal库学习ADC
  • XSS的反射型、DOM型、存储型漏洞
  • sqli-labs靶场通关笔记:第32-33关 宽字节注入
  • Go语言中的类型转换与类型推断解析