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,因此函数也能访问对象的一些通用方法。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matrix-breakout-2-morpheus

将这一关的镜像导入虚拟机,出现以下页面表示导入成功 以root身份打开kali终端,输入以下命令,查看靶机ip arp-scan -l 根据得到的靶机ip,浏览器访问进入环境 我们从当前页面没有得到有用的信息,尝试扫描后台 发现有一个…

最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址:2410.05954https://arxiv.org/pdf/2410.05954 项目地址: jy0205/Pyramid-Flow: 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…

RSICV国产芯片之CHV208

1. 芯片选型分析的对比维度 分析或者对标应用的芯片替代思路 1.1 内核/主频/存储空间支持 内核能力/指令集支持(考虑工具链兼容性); 主频:对比计算能力是否满足基本要求 存储:内存--数据搬移空间决定数据运算的…

7. petalinux 根文件系统配置(package group)

根文件系统配置(Petalinux package group) 当使能某个软件包组的时候,依赖的包也会相应被使能,解决依赖问题,在配置页面的help选项可以查看需要安装的包 每个软件包组的功能: packagegroup-petalinux-audio包含与音…

基于Spring Boot的个人健康管理系统

一、系统背景与意义 随着现代生活节奏的加快和人们健康意识的日益增强,个人健康管理成为了人们关注的焦点。然而,传统的健康管理方式往往依赖于纸质记录、定期体检等手段,不仅效率低下,而且难以实现对健康数据的持续跟踪和深入分…

上手教程:使用Terraform打造弹性VPC架构

最近Akamai发布的虚拟专用云(VPC)功能提供了一种隔离的网络,让云资源可以用私密的方式进行通信。 关于Akamai VPC功能,最棒的地方在于它有着极高的灵活性。用户可以通过Cloud Manager、开发人员工具(如CLI&#xff09…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …

【论文复现】进行不同视角图像的拼接

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 进行不同视角图像的拼接 背景描述算法简介SIFT算法原理代码原理代码部署核心代码拼接结果其他的图片如何进行拼接? 修改内容&…

xxl-job 简单的入门到实战

本文是参考官方文档自己实践一次,纯享版,大致也是作者边写博客边去跟着官方文档实现 一、前期准备 1、官网地址 GitHub地址: GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB&…

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了,后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…

江苏捷科云:可视化平台助力制造企业智能化管理

公司简介 江苏捷科云信息科技有限公司(以下简称“捷科”)是一家专注于云平台、云储存、云管理等产品领域的创新型企业,集研发、生产和销售于一体,致力于在网络技术领域打造尖端品牌。在推动制造业企业数字化转型的进程中&#xf…

【视觉惯性SLAM:对极几何】

对极几何(Epipolar Geometry)介绍 对极几何是立体视觉中的核心内容之一,它描述了两个相机在观察同一个三维场景时,成像平面之间的几何关系。对极几何能够约束图像中对应点的位置关系,是双目立体匹配、三维重建、以及位…

从Condition开始,回顾AQS

Synchronized和Reentrantlock的挂起逻辑 synchronized中有两个核心的结构 EntryList cxq:等待拿锁的线程存储位置Waitset:被执行wait方法的线程存储位置 流转: 线程获取锁资源失败,扔到EntryList cxq线程持有锁资源&#x…

umi : 无法加载文件 D:\software\nodejs\node_global\umi.ps1,因为在此系统上禁止运行脚本。

问题详情 2、解决方法 1.使用命令 get-ExecutionPolicy查看 显示Restricted:限制 所以要给权限 2. 使用命令:Set-ExecutionPolicy -Scope CurrentUser 3. 会提示为参数提供值 4. 输入: RemoteSigned 具体如下图所示,成功解决。 报…

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大…

02、并发编程的三大特性

并发编程有三大特性分别是,原子性,可见性,有序性。会产生这些特性的根本原因是现在的服务器都是多CPU多核心数的,每个CPU都有自己单独的一套缓存和pc系统,而且程序在运行时按照JMM的规范,它们是需要先把数据…

基于Java+Jsp Servlet Mysql实现的Java Web在线商城项目系统设计与实现

一、前言介绍: 1.1 项目摘要 随着互联网技术的飞速发展,电子商务已成为现代商业活动的重要组成部分。在线商城作为电子商务的一种重要形式,以其便捷性、高效性和广泛覆盖性,受到了越来越多消费者的青睐。同时,随着消…

【安全测试相关知识】

安全测试介绍 背景 在当前信息技术快速发展的背景下,网络安全问题日益严峻,数据泄露、黑客攻击、病毒传播等安全事件层出不穷,给个人、企业乃至国家带来严重威胁。所以安全测试已成为企业和国家关注的重心 作用 安全测试是确保软件系统安…

WPS如何快速将数字金额批量转换成中文大写金额,其实非常简单

大家好,我是小鱼。 在日常的工作中经常会遇到需要使用金额大写的情况,比如说签订业务合同时一般都会标注大写金额,这样是为了安全和防止串改。但是很多人也许不太熟悉金额大写的方法和习惯,其它没有关系,我们在用WPS制…

Element-ui的使用教程 基于HBuilder X

文章目录 1.Element-ui简介2.使用HBuilderX 创建一个基于Vue3的项目 (由于是使用的基于Vue3的Element-ui)3.安装element-ui4.在项目里完全引用element-ui5.引用组件6.运行项目 1.Element-ui简介 Element,一套为开发者、设计师和产品经理准备…