JS补原型链

在JavaScript中,补足一个对象的原型链通常是指确保一个对象继承自另一个对象。这涉及到原型和构造函数。

对于构造函数(通常首字母大写,如 Animal),它们有一个 prototype 属性,这个属性是一个对象,它定义了通过这个构造函数创建的所有实例的原型。当你使用 new 关键词创建一个新对象时,新对象的内部 [[Prototype]](也就是它的 __proto__ 属性)会被设置为构造函数的 prototype 属性。

例如:

javascript 复制代码
function Animal(name) {
  this.name = name;
}

Animal.prototype.speak = function() {
  console.log(`${this.name} makes a noise.`);
};

let dog = new Animal('Rover');

dog.speak(); // Rover makes a noise.
console.log(dog.__proto__ === Animal.prototype); // true

在这个例子中,dog 对象的原型链是这样的:

dog -> Animal.prototype -> Object.prototype -> null

这里的 dog.__proto__ 指向 Animal.prototype,而 Animal.prototype 的 __proto__ 又指向 Object.prototype,这是所有对象默认的原型。

如果你想为一个已经存在的对象补足原型链,你不能直接使用 对象.prototype,因为实例对象没有 prototype 属性(这个属性是属于构造函数的)。而是应该使用:

  • Object.getPrototypeOf(obj) 来获取对象的原型。
  • Object.setPrototypeOf(obj, prototype) 来设置对象的原型(尽管这种做法在性能上不是很好,因此不推荐在性能敏感的环境中使用)。

例如:

javascript 复制代码
let cat = {
  meow: function() {
    console.log('Meow!');
  }
};

let myCat = {
  name: 'Whiskers'
};

// Set myCat's prototype to cat
Object.setPrototypeOf(myCat, cat);

myCat.meow(); // Meow!

在这个例子中,myCat 对象的原型链被补足为:

myCat -> cat -> Object.prototype -> null

现在 myCat 能够访问 cat 对象中定义的 meow 方法了。

相关推荐
燃烧的枫18 小时前
Windows 下 YOLO11 Pose 的 TensorRT C++ 部署
windows·yolo·tensorrt·1024程序员节·yolo11-pose
AI日报派送佬18 小时前
2026年11月02日 AI 行业日报|商汤开源 Loop-9B、Pika 发布 H3 Flex 音视频模型、Meta× 傅利叶推出人形机器人 Max
人工智能·微软·开源·音视频·openai·1024程序员节·ai日报
avi911119 小时前
【AI教人】UnityEditor扩展Spine动画,Spine骨骼,预览Preview一切
spine·骨骼动画·1024程序员节·editor扩展·spine动画·spine骨骼
开开心心就好20 小时前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
Martina_03211 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节
c_hn_0071 天前
量化数据12:国内期货L2历史数据:Tick、逐笔、五档盘口一次性打包下载
数据库·1024程序员节·#深度订单簿数据·#历史行情订单薄·#本地csv数据存储
释厄6232 天前
同性线套娃律——圆面积必然=1+2+...+n 的求和·圆心不与 π 相关
java·人工智能·算法·1024程序员节
在所不辞兄2 天前
【零基础学智能仿真-69】综合项目——材料参数驱动的仿真研究
人工智能·深度学习·神经网络·算法·机器学习·1024程序员节
Captain1314_李祖团2 天前
章节3:MLIR完成一个端到端的流程
mlir·1024程序员节
Solange__2 天前
在线3D预览器、Blender和游戏引擎怎么选?按5类任务比较格式、隐私与编辑性
人工智能·游戏·3d·游戏引擎·blender·1024程序员节·关卡设计