XSS原型与原型链

概念说明

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

javascript 复制代码
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

原型链的层级结构

javascript 复制代码
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

改原型对实例的影响

javascript 复制代码
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
相关推荐
qq_2113874713 小时前
基于LangGraph多agent
开发语言·前端·javascript·agent·langgraph
摸鱼仙人~13 小时前
Vue Todo 实战练习教程(简略版)
前端·javascript·vue.js
dzj88813 小时前
云朵字生成器-html
前端·css·html·云朵字
FlyWIHTSKY13 小时前
Vue 3 单文件组件加载顺序详解
前端·javascript·vue.js
霪霖笙箫13 小时前
真授之以渔:我是怎么从"想给文章配几张图",一步步做出一个可发布 skill 的
前端·人工智能·开源
yzin13 小时前
【源码】【react】useCallback、useMemo、memo 原理
前端·react.js
CHU72903513 小时前
扭蛋机盲盒小程序前端功能设计及核心玩法介绍
前端·小程序
毛骗导演14 小时前
OpenClaw Gateway RPC 运行时:一个 WebSocket 协议引擎的深度解剖
前端·架构
码路飞14 小时前
不会 Rust 也能玩 WebAssembly:3 个 npm install 就能用的 WASM 神器
前端·javascript·webassembly
sudo_jin14 小时前
从“输入网址”到“帧级控制”:我对事件循环与主线程管理的终极认知
前端·javascript