JavaScript中构造函数实例原型对象与函数原型对象的区别解析
JavaScript原型疑问:
Tool.prototype到底指向什么? 先直接给结论:Tool.prototype返回的是Tool实例的原型对象,选项A正确;选项B的描述混淆了两个完全不同的原型概念——构造函数的prototype属性,和函数自身的原型。
核心概念区分
Tool.prototype的本质
当你用new Tool()创建实例时,每个实例的内部[[Prototype]](可通过Object.getPrototypeOf(实例)获取)都会指向Tool.prototype。这个对象是专门给Tool的实例准备的,用于让所有实例共享属性和方法,所以选项A的描述完全准确。函数自身的原型≠
Tool.prototype
函数Tool本身也是一个对象,它自己的原型对象是Function.prototype(通过Object.getPrototypeOf(Tool)可以获取)。这个原型是所有函数都默认继承的,包含了call、apply、bind这类函数通用的方法,和Tool.prototype是完全独立的两个对象。
代码验证
function Tool() {} const instance = new Tool(); // 实例的原型就是Tool.prototype console.log(Object.getPrototypeOf(instance) === Tool.prototype); // 输出 true // 函数Tool自身的原型是Function.prototype console.log(Object.getPrototypeOf(Tool) === Function.prototype); // 输出 true // 两个原型是不同的对象 console.log(Tool.prototype === Function.prototype); // 输出 false
总结两个概念的区别
- 构造函数的实例原型对象:即构造函数的
prototype属性指向的对象,是该构造函数所有实例的原型,用于实现实例间的属性/方法复用。 - 函数的原型对象:指函数作为对象时自身的原型,也就是
Function.prototype,是所有函数的通用原型,提供函数的基础方法。
内容的提问来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

