首页 > 其他分享 >js面试题手写代码

js面试题手写代码

时间:2024-09-02 18:02:59浏览次数:5  
标签:面试题 obj Object js 原型 let 手写 fn objPrototype

实现一个new操作符

实现一个instacneof操作符

 

实现一个new操作符

 

function myNew(fn,...args){
    if(typeof fn !== 'function){
        return TypeError('fn must be a function')
    }

    //let obj = {}  创建一个空对象
    //obj.__proto__ = fn.prototype  将空对象的原型 设置为构造函数fn的 prototype 原型属性
    //创建对象,并指定原型,也可以用下面的代码
    let obj = Object.create(fn.prototype)  //Object.create(proto) 创建一个对象,并指定其原型

    //执行构造函数,并改变this指向
    let result = fn.apply(obj,args)
    //let result = fn.call(obj,...args) 

    return typeof result === 'object' ? result : obj

}

 

实现一个instacneof操作符

/**
* 用法:instanceof 运算符是用检测构造函数的 prototype 属性是否出现在 某个实例对象的原型链上
* 思路:
* 1.通过Object.getPrototypeOf获取 obj 原型
* 2. 循环判断 objPrototype 是否和 构造函数的原型相等;如果相等返回true;
* 3. 如果不相等就继续obj原型上的原型(Object.getPrototypeOf(objPrototype))
* 4. 判断objPrototype是否为 null,如果为null 说明不存在,返回false
*/

function myInstanceof(obj, fn){
    if(typeof fn !== 'function'){
        return false
    }
    //let objPrototype = obj.__proto__;
    let objPrototype = Object.getPrototypeOf(obj)  //Object.getPrototypeOf() 和obj.__proto__可以互换使用,单位了代码的健壮he可维护性,建议使用Object.getPrototypeOf()
    while(true){
        if(objPrototype === null){
            return false 
        }
        if(objPrototype === fn.prototype){
            return true
        }
        //objPrototype = objPrototype.__proto__
        objPrototype = Object.getPrototypeOf(obj)
    }
} 

 

标签:面试题,obj,Object,js,原型,let,手写,fn,objPrototype
From: https://www.cnblogs.com/yangkangkang/p/18393214

相关文章

  • threejs中OrbitControls的用法
    OrbitControls是Three.js库中一个非常流行的相机控制组件,它允许用户通过鼠标(或触控设备)来旋转、缩放和平移场景中的相机,从而从不同的角度和距离观察场景。下面是如何在Three.js中使用OrbitControls的方法:1.引入OrbitControls首先需要从Three.js的CDN或本地路径中引入O......
  • [vue] jszip html-docx-js file-saver 图片,纯文本 ,打包压缩,下载跨域问题
    npminstalljszipfile-saverimportJSZipfrom'jszip';importFileSaverfrom'file-saver';JSZip创建JSZip实例:constzip=newJSZip();创建文件:支持导出纯文本zip.file("hello.txt","HelloWorld\n");创建文件夹:zip.folder("file")......
  • JS 基础
    1.什么是JavaScriptJavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言1.1JavaScript特点:​向HTML页面中添加交互行为​脚本语言,语法和Java类似​解释性语言,边执行边解释1.2JavaScript组成:1.3JavaScript的基本结构:<scripttype="text/javascript"......
  • JS的DOM高级编程和动态添加表格行的小案例实现
    DOM高级编程(DocumentobjectModal)DOM概述DOM-DocumentObjectModal,它是W3C国际组织的一套Web标准DOM是一种与浏览器、平台、语言无关的接口Dom认为:html文档中每个成员都是一个节点,根据节点的不同,可分为:文档节点(document)元素节点(element)属性节点(attribute)文本节点(tex......
  • 原生JS实现城市选择(输入提示)组控件
    先看效果图:功能需求:国内城市、国际城市切换首字母索引分类输入变化提示HTML代码<divclass="m-list"><divclass="g-sch"><ulclass="f-cbz-blankhide"><liclass="first"><pclass="u-......
  • Nodejs的安装
    一.下载安装包及安装官网下载: (英文)https://nodejs.org/en(中文)https://nodejs.org/zh-cn/nodejs中文网下载: https://nodejs.cn/以上两个地址都可以下载     查询是否安装成功win+R运行cmd,输入node-v查看  二.配置全局安装目......
  • 基于SpringBoot+MySQL+SSM+Vue.js的学生选课系统
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频基于SpringBoot+MySQL+SSM+Vue.js的学生选课系统(附论文)技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描......
  • jsp班级班费缴纳及使用情况管理56jy4
    jsp班级班费缴纳及使用情况管理56jy4本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能学生,教师,通知公告,班级信息,班费通知,班费统计,使用情况技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动......
  • jsp班级财务管理系统m9ttl
    jsp班级财务管理系统m9ttl本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能班级信息,学生,教师,班费信息,日常开销开题报告内容一、项目背景与意义在现代化教育体系中,班级作为学校的基本组成单元,其......
  • 【vue、react】前端如何为package.json添加注释
    文章目录前言安装使用方法问题前言写了个项目,想给package.json加注释结果发现加不上去,就在网上查找了相关文章,特意总结记录一下,防止下次使用。参考文章:如何为package.json添加注释众所周知,JSON文件是不支持注释的,除了JSON5/JSONC之外,我们在开发项目特别是前端项目......