前端面试题每日一练,测测你对JavaScript原型继承和 instanceof 的理解

今天的挑战题目涉及到JavaScript中的原型继承和 instanceof 操作符的使用。我们将通过分析一个关于构造函数和原型链的例子,来探索对象继承的机制,以及如何判断对象的类型。让我们一起深入解析这段代码,看看它会输出什么以及为什么。

代码解析

首先,代码定义了两个构造函数 Shape 和 Circle:

go 复制代码
function Shape() {}
function Circle(radius) {}
  • Shape 是一个简单的构造函数,目前它不执行任何操作。

  • Circle 是一个构造函数,它接受一个参数 radius,但目前也没有执行任何操作。

接下来,代码通过 Object.create 设置了 Circle.prototype 的原型:

go 复制代码
Circle.prototype = Object.create(Shape.prototype);
  • 这行代码的作用是让 Circle 的原型 (Circle.prototype) 继承自 Shape 的原型 (Shape.prototype)。

  • 这意味着通过 new Circle() 创建的对象,它的原型链上会包含 Shape.prototype,即 Circle 是 Shape 的子类。

然后,代码创建了一个 Shape 类型的对象:

go 复制代码
const shape = new Shape();
  • 这里我们使用 new Shape() 创建了一个对象 shape。它的原型是 Shape.prototype。

最后,代码使用 instanceof 操作符来检查 shape 是否是 Circle 的实例:

go 复制代码
console.log(shape instanceof Circle);

理解 instanceof

instanceof 操作符用于检测某个对象是否是某个构造函数的实例。其工作原理是检查对象的原型链上是否存在该构造函数的 prototype 属性。

在这个例子中:

  • shape 对象的原型链是 Shape.prototype。

  • Circle.prototype 的原型是 Shape.prototype。

但是,shape 对象的原型链并不直接包含 Circle.prototype,而是直接指向 Shape.prototype,因此:

  • shape instanceof Circle 会返回 false,因为 shape 的原型链中不包括 Circle.prototype。

输出结果

根据上述分析,最终的输出结果是:

go 复制代码
console.log(shape instanceof Circle); // 输出 false

结束

这道题目展示了JavaScript中的原型继承和 instanceof 操作符的工作原理。尽管 Circle 的原型链中包含 Shape.prototype,但反过来检查 Shape 的实例是否属于 Circle 并不会成立。理解原型链的层次关系对于正确解答这道题目至关重要。你答对了吗?欢迎在评论区分享你的答案和见解!

每天一道面试题,帮助你提高编程技能,不断进步!记得关注哦!

相关推荐
夏幻灵2 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
Lvan的前端笔记3 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
三天不学习3 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs194054 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
bkspiderx4 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆4 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光4 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
明月_清风5 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
码云数智-园园5 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言