首页 > 其他分享 >js instanOf的实现逻辑 super()

js instanOf的实现逻辑 super()

时间:2023-08-01 13:00:10浏览次数:41  
标签:instanceof instanOf js 运算符 派生类 父类 super 构造函数

在 JavaScript 中,instanceof 运算符用于检查一个对象是否是另一个对象的实例。它的使用形式是 obj instanceof constructor,其中 obj 是要检查的对象,constructor 是要检查的构造函数。

instanceof 运算符的实现逻辑如下:

  1. 首先,它会检查 constructor 是否是一个函数。如果 constructor 不是一个函数,instanceof 运算符会抛出一个 TypeError

  2. 如果 constructor 是一个函数,它会检查 obj 是否具有一个名为 [[Prototype]] 的内部属性。这个属性代表了 obj 的原型对象。

  3. 接下来,instanceof 运算符会检查 constructor 是否具有一个名为 prototype 的属性。这个属性代表了构造函数的原型对象。

  4. 如果 obj 的原型对象和构造函数的原型对象相等,或者如果 obj 的原型链中有一个或多个对象的原型对象与构造函数的原型对象相等,那么 obj 就被认为是 constructor 的一个实例,instanceof 运算符返回 true

  5. 如果 obj 的原型链上没有与构造函数的原型对象相等的原型对象,instanceof 运算符返回 false

需要注意的是,instanceof 运算符只能检查对象是否是某个构造函数的实例,而不能用于检查对象是哪种具体类型的实例。另外,instanceof 运算符也无法跨越不同的 JavaScript 的全局执行上下文,因为每个全局执行上下文都有自己的原型链。

 

在 JavaScript 中,super() 是用于调用父类构造函数的特殊关键字。它只能在派生类的构造函数中使用,用来调用父类的构造函数以完成对父类的属性初始化。

使用 super() 的一般步骤如下:

  1. 在派生类的构造函数内部,使用 super() 进行调用,如 super()

  2. super() 必须在访问 this 或者在派生类的构造函数中访问它之前调用。否则,会引发 ReferenceError

  3. 调用 super() 后,它会执行父类的构造函数,并将当前实例作为 this 传递给父类的构造函数。

  4. 父类的构造函数执行完成后,派生类的构造函数将继续执行,可以在派生类的构造函数中对自身的属性进行初始化。

使用 super() 的主要目的是在派生类的构造函数中获得父类的属性初始化。通过调用父类的构造函数,派生类可以确保在自己的构造函数中对继承的属性进行正确的初始化。

需要注意的是,如果派生类的构造函数没有显式地调用 super(),则 JavaScript 引擎会默认在派生类构造函数的开头隐式调用 super(),相当于 super.call(this)。这样做是为了确保派生类的实例正确地继承父类的属性。

标签:instanceof,instanOf,js,运算符,派生类,父类,super,构造函数
From: https://www.cnblogs.com/liace/p/17596174.html

相关文章

  • JS正则表达式大全
    字符含意\做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。^匹配一个输入或一行的开头,/^a/匹......
  • jQuery验证控件jquery.validate.js使用说明
    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validationjQueryplugin:Validation使用说明一导入js库<scriptsrc="../js/jquery.js"type="text/javascript"></script><scriptsrc="../js/jquery.validate.js"type=&q......
  • Node.js 与前端开发实战
    0x1Node.js的应用场景前端工程化打包工具:webpack、vite、esbuild、parce代码压缩:uglifyjs语法转换:babeljs,typescript难以替代Web服务端应用学习曲线平缓,开发效率较高运行效率接近常见的编程语言社区生态丰富及工具链成熟(npm)与前端结合的场景会有优势(SSR)竞......
  • Next.js 实战
    0x1CSR,SSR,SSGCSR客户端渲染(Client-SideRendering)。常见B端Web应用开发模式,前后端分离,服务器压力相对更轻,渲染工作在客户端进行,服务器直接返回不加工的HTML用户在后续访问操作缺点:首屏时间长SSR服务端渲染(Server-SideRendering)。JSP/PHP已经体现了服务器端渲染,......
  • Android上基于JSON的数据交互应用
    JSON的定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。–Json.org......
  • android网络通讯数据封装之 json
    Demo程序包括客户端和服务端客户端按json数据格式封装数据传至服务端。服务端为简单的servlet程序,负责接收客户端传到json数据,然后按原数据返回客户端.实例代码如下:publicstaticStringcmdLogIn(){StringurlString="http://192.168.8.75:89/webroot/jsontest";HttpPo......
  • JSONP前端流程
    JSONP前端流程JSONP总体思路后端先给前端一个接口文档。如https://www.baidu.com/sugrec?prod=pc&wd=用户输入的文字&cb=后端要调用的前端定义的全局函数名。前端会封装一个jsonp函数:它的作用是传入特定参数,返回一个Promise实例。会用jsonp的方式来请求后端数据,把后端......
  • [SWPUCTF 2022 新生赛]js_sign
    [SWPUCTF2022新生赛]js_sign题目来源:nssctf题目类型:web涉及考点:JS分析1.题目给了一个传入口,不管传入什么都回显‘fuckoff’查看源代码:看到一个base64编码,先解码看看:2.搜了下发现tapcode是个编码方式,于是对flag进行tapcode解码把它构造成flag的形式即可:NS......
  • node js版本管理工具---NVM
    一、前言nvm(NodeVersionManager)是一个node的版本管理工具,可以快捷的进行node版本的安装、切换、卸载、查看等。它能够在项目开发中根据不同需求轻松切换所依赖不同版本的Node.js,从而让开发者可以在不同的环境之间进行切换,从而更好地保证软件的稳定性运行。二、安装1、linux或......
  • JS截取url中?后面的参数值的两种方法
    方法一:例如:得到的url varurl=window.location.href;varquerys=url.substring(url.indexOf('?')+1).split('&');varresult=[];for(vari=0;i<querys.length;i++){vartemp=querys[i].split('=');if(temp.le......