当前位置: 首页 > article >正文

Function.prototype和Object.prototype 的区别

Function.prototypeObject.prototype 都是 JavaScript 中的重要原型对象,它们分别用于所有函数对象和所有普通对象的原型链。它们有很多不同之处,主要体现在它们所代表的对象类型和功能上。

1. 作用域和对象类型

  • Object.prototype 是所有普通 JavaScript 对象的原型。

    • 任何通过 object 构造器(如 new Object())或字面量(如 {})创建的对象都继承自 Object.prototype
    • Object.prototype 上定义了许多通用的属性和方法,比如 toString()hasOwnProperty()valueOf() 等。
  • Function.prototype 是所有函数对象的原型。

    • 任何通过 function 关键字声明的函数,或通过 new Function() 构造的函数,都会继承自 Function.prototype
    • Function.prototype 上定义了与函数相关的方法,如 call()apply()bind() 等。

2. 原型链的区别

  • Object.prototype 是最顶层的原型

    • 所有普通对象(包括数组、日期对象等)最终都继承自 Object.prototype,并且它位于原型链的最顶端。
    • Object.prototype 本身没有继承其他对象,它是原型链的“根”。
  • Function.prototype 继承自 Object.prototype

    • 所有函数对象都继承自 Function.prototype,因此,Function.prototype 上的方法可以被所有函数使用。
    • 同时,Function.prototype 也继承了 Object.prototype,这意味着函数也可以访问 Object.prototype 上的方法。

3. 核心属性和方法的区别

  • Object.prototype 的常见属性和方法

    • toString(): 返回对象的字符串表示。
    • hasOwnProperty(): 检查对象是否拥有某个自有属性。
    • valueOf(): 返回对象的原始值。
    • constructor: 指向创建该对象的构造函数。
  • Function.prototype 的常见属性和方法

    • call(): 用于调用函数,并指定 this 上下文和传入的参数。
    • apply(): 与 call() 类似,不过 apply() 接受参数是一个数组。
    • bind(): 创建一个新的函数,绑定指定的 this 值和初始参数。
    • constructor: 指向 Function 构造函数。

4. 构造器和实例的关系

  • Object.prototype 是普通对象的构造器原型。所有对象的 __proto__ 链接最终都会指向 Object.prototype。因此,你可以通过对象访问到 Object.prototype 上的方法。

    • 例如:
      const obj = {};
      console.log(obj.__proto__ === Object.prototype); // true
      
  • Function.prototype 是函数对象的构造器原型。所有函数对象的 __proto__ 链接最终指向 Function.prototype

    • 例如:
      function foo() {}
      console.log(foo.__proto__ === Function.prototype); // true
      

5. 总结

特性Object.prototypeFunction.prototype
作用所有对象的原型所有函数对象的原型
继承关系是原型链的最顶层,没有继承其他对象继承自 Object.prototype
主要方法toString(), hasOwnProperty(), valueOf()call(), apply(), bind(), constructor
构造器所有普通对象(如 {})的构造器原型所有函数(如通过 function 关键字声明的)构造器原型

例子

// 1. `Object.prototype`
const obj = {};
console.log(obj.hasOwnProperty('toString')); // true
console.log(obj.toString()); // '[object Object]'
console.log(obj.constructor === Object); // true

// 2. `Function.prototype`
function myFunction() {}
console.log(myFunction.call); // function call()
console.log(myFunction instanceof Function); // true
console.log(myFunction.constructor === Function); // true

总结

  • Object.prototype 是所有对象的原型,提供了与对象相关的通用方法。
  • Function.prototype 是所有函数的原型,提供了与函数执行相关的专用方法,同时继承自 Object.prototype,因此函数也能访问对象的一些通用方法。

这两者各自有不同的角色和功能,分别用于对象和函数类型的原型链。


http://www.kler.cn/a/456697.html

相关文章:

  • swiftui开发页面加载发送请求初始化@State变量
  • 【YashanDB知识库】sys登录提示账户被锁,怎么处理?
  • NLP基础知识 - 向量化
  • 绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图
  • 自动驾驶3D目标检测综述(六)
  • vue3学习笔记(10)-$subscribe,store组合式写法
  • 【自动驾驶】3 激光雷达③
  • webflux版定时任务实现方案
  • LeetCode 242. 有效的字母异位词 (C++实现)
  • 超短波自组网如何守护森防安全?
  • Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据
  • AI开发 - 算法基础 递归 的概念和入门(一) 递归算法的常见应用 PYTHON
  • STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)
  • Gavin Wood 的 Polkadot 2024 年度回顾:技术突破与未来的无限可能
  • 汽车的hmi设计还能有哪些创新?要从哪些方面下手
  • 接口测试面试题
  • 【网络】什么是VLAN(Virtual Local Area Network虚拟局域网)?物理网络划分多个子网络的技术
  • 最新的序列数据预测模型SOFTS详解
  • fineReport_“数据保留N位小数“
  • 记一次内存泄漏分析(待写稿)
  • 11.MySQL视图特性
  • 镍氢电池材料合金在电池中的应用与性能优化
  • 《计算机视觉:开启智能感知新时代》
  • openEuler 下安装nginx
  • elasticsearch-java客户端jar包中各模块的应用梳理
  • 洪水防洪预警功能:水库水雨情监测系统的应急响应机制