前端小技巧: TS实现new出一个对象的内部过程

详细讲解TS之new关键字做了什么 本文详细解析了TypeScript中new关键字的工作原理:1)创建空对象并绑定原型链;2)执行构造函数初始化实例;3)返回实例对象(可被覆盖);4)在TypeScript中受类型检查和访问控制约束。文章还指出构造函数可抛出异常中断实例化过程,并通过代码示例展示了继承、原型方法和特殊返回值等特性,完整呈现了从对象创建到返回的全流程。 阅读详情

new 一个对象,写代码实现内部过程

  • class 是 function 的语法糖
  • new 一个对象的过程
    • 创建一个空对象obj, 继承构造函数的原型
    • 执行构造函数 (将obj作为this)
    • 返回 obj
export function customNew<T>(constructor:Function, ...args: any[]): T {
  // 1. 创建一个空对象,继承 constructor 的原型
  const obj = Object.create(constructor.prototype)
  // 2. 将 obj 作为 this 执行 constructor 传入参数
  constructor.apply(obj, args)
  // 3. 返回 obj
  return obj
}

class Foo {
  name: string
  city: string
  n: number
  
  constructor(name: string, n: number) {
    this.name = name
    this.city = '北京'
    this.n = n
  }

  getName() {
    return this.name
  }
}

// 下面两者保持一致
const f = customNew<Foo>(Foo, 'www', 32)
// const f = new Foo('www', 200)

console.log(f)
console.info(f.getName())
  • Object.create 和 {} 有什么区别?
    • {} 创建空对象,原型指向 Object.prototype

    • Object.create 创建空对象,原型指向传入的参数

      const obj1 = {}
      obj1.__proto__ = Object.prototype // true
      
      const obj2 = Object.create({x: 100})
      obj2.__proto__ //  指向 {x:100} 这里要注意下
      
TypeScript(三):TypeScript面向对象 抽象类的特点抽象类不能通过new创建实例抽象类可以包含抽象方法,也可以包含实现的具体方法有抽象类的方法,必须是一个抽象类抽象方法必须在子类中实现现在有这样一个需求定义一个shape抽象类,里面有一个getArea的抽象方法分别定义三角形,圆形,长方形等多种形状的类//抽象方法,必须存在于抽象类中,抽象类不必具体实现//圆形//继承自抽象类的子类,要具体实现其抽象方法//长方形return 3*4//只需要调用Shape中的方法即可求出面积。 阅读详情

相关推荐

【TS语法|基础入门】《前端的未来——TypeScript》掌握TS基础语法

本文是我在学习TS课程中的一些学习笔记和听课记录,从这一期开始将正式进入TS的语法内容,本节内容紧接上一期【起步了解】《前端的未来——TypeScript》了解TS的工作流程的内容,重点介绍TS的基础语法。创作不易!多多关照!

XSL_HR的博客 3195

TS中的类

类的基本结构 class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } } let greeter = new Greeter("world"); 如上声明一个Greeter类。这个类有3个成员:一个叫做gre..

微光的博客 1653

2024年前端面试题JS+TS篇

我希望我的解释和答案都是通俗易懂的

xiaoliyo_的博客 2468

【typescript】interface里面用new表示什么类型

前言 今天群里一个人问了个ts问题,说类型不正确,我一看,他的interface里面用了new,一般写ts很少有interface里写new的,interface里写new的一般都是在d.ts里写的。 答案 我翻了ts文档,其中有句是这么说的:The function signature is prefixed with the keyword ‘new’ indicating that t...

不忘初心,坚定道路! 7301

【TypeScript】TS自定义类型之对象属性必选、对象属性可选(十一)

TS中实现对象属性必选、对象属性在开发过程中十分常见,前端在传参数时,有些参数比必传,有些是选传,我们可以定一个多个对象来实现传参,但是这让代码变得冗余。我们可以通过TS定义数据类型来实现。

编码世界 6万+

tsnew:从零开始设置一个Typescript(和React)项目

备忘单:从头开始的打字稿(和React) 从头开始创建一个新的Typescript项目所需的一切。 在不使用情况下,将项目启动时间缩短到几分钟。 这样可以使您的项目保持灵活,透明和面向未来。 在一个空目录中运行以下命令来创建一个新项目,该项目遵循这些文档中的所有指导。 npx tsnew 先决条件 (v12或更高版本) 推荐建议 使用和以下插件: 使用NPM v7代替Yarn。 使用Babel而不是Typescript进行翻译。 当需要时,请使用 。 使用 (汇总)来构建Web库。 使用ESLint(和更漂亮)而不是TSLint。 使用CSS-in-JS而不是SASS / SCSS模块。 使用React代替Preact。 条款 库-发布到NPM的项目,用作另一个项目中的依赖项。 CLI-可作为命令行可执行文件运行的库。 SPA-单页应用程序(AKA:UI,Web捆

【前端】Vue3+elementui+ts,给标签设置样式属性style时,提示type check failed for prop,再次请出DeepSeek来解答

翻看了下上一篇写前端文章还是一年前,不知不觉又好久没写前端文章了。 最近太忙了,写文章都是忙里偷闲,挤点时间出来记录下开发过程中遇到得一些小细节问题。 本篇文章就是写开发前端时,博主习惯性打开console控制台,只要有黄色警告得都统统解决, 哈哈哈!

小5聊的博客 6045

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

前端迅速通关TS

感谢小满zs,花了两天时间看完了小满在B站的教学视频,算是对TS有了一些初步的了解,以下是我个人在学习的过程中做的笔记,希望对大家能有帮助,迅速通关TS。

x2320818066的博客 868

Xilinx HydraMini试玩教程

HydraMini是Xilinx推出的基于Pynq-Z2开发板的自动驾驶开发小车,其有着简单易学、高灵活性、高扩展性、高性能等优良特性,是研究人员和学生进入自动驾驶领域的一个平台。本教程会通过最基础的讲解和步骤带领读者熟悉这个平台的基本开发流程。

qq_25762163的博客 1773

Open5GS实战:从零搭建树莓派5G核心网并与商用终端联调

本文详细介绍了如何在树莓派5上从零开始搭建基于Open5GS的5G核心网,涵盖系统准备、依赖安装、源码编译、关键配置修改及服务启动全流程。通过整合SDR基站与商用终端进行端到端联调,为开发者和研究者提供了一个低成本、可实践的5G网络实验平台,助力物联网与边缘计算应用的本地化测试与验证。

weixin_29194255的博客 162

【华夏OA项目实战】3-23 前端TS实现Cropper裁剪用户头像图片

Alibaba Spring Cloud + Dubbo3.0架构的微服务在线办公OA系统实战开发。

qq_40379416的博客 1612

用Python+LLM实现小说自动转剧本:从爬取到生成的完整实战指南(附GitHub源码)

本文提供了一份完整的实战指南,详细介绍了如何利用Python和大语言模型(LLM)构建一个自动化的小说转剧本工具。文章从网络爬虫获取文本开始,逐步讲解了使用LLM进行智能解析与结构化、集成专业模型进行情绪分析与动作生成,最终合成并输出格式规范的剧本文档。通过模块化架构设计和附带的GitHub源码,帮助开发者掌握从数据获取到内容生成的全流程,实现高效的小说剧本转换器。

xray4的博客 420

「1.9W字总结」一份通俗易懂的 TS 教程,入门 + 实战!

前端瓶子君,关注公众号回复算法,加入前端编程面试算法每日一题群本文知识图谱分基础、进阶和实战三个部分,分别如下:image.pngimage.pngimage.png这三份知识图谱里罗列的...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 5万+

Unity3D Lua与C#的相互调用与性能剖析详解

在游戏开发中,经常会遇到Lua与C#之间的相互调用的情况。本文将详细介绍Unity3D中Lua与C#的相互调用的方式,并对其性能进行剖析。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!一、Lua与C#的相互调用方式Lua调用C#在Unity3D中,可以通过Lua调用C#的方式来实现Lua与C#的相互调用。具体步骤如下:(1)首先需要在Unity3D项目中导入Lua的相关库,例如tolua或者xlua。

weixin_49669470的博客 1215

kali2020.2安装出现的问题并附详细解决办法

kali2020.2的安装

weixin_48776804的博客 3050

【前端学习-TypeScript】3-TS对象类型

本文总结了TypeScript中对象类型的7种定义方式:1)直接声明属性类型;2)接口定义;3)类型别名。重点介绍了可选属性(?)、只读属性(readonly)和索引签名的用法,并解释了最小可选属性规则对类型安全的保障。文章还展示了对象解构赋值的类型声明方法,以及空对象类型的特性。每种方式都配有代码示例,适合开发者快速掌握TS对象类型的关键概念。内容参考了满神B站教程和官方文档。

m0_52286273的博客 1258

【声纳与人工智能融合——从理论前沿到自主系统实战】第一章 声纳AI的数据基础:仿真、数据集与表征学习

该数据集的特点是包含了多种底质背景(沙地、泥地、碎石区)与噪声条件,适合验证模型的背景抑制能力。Urashima数据集由日本海洋研究开发机构(JAMSTEC)发布,基于自主水下航行器(AUV)采集,包含前视声纳序列数据,主要用于水下导航与避障算法评估,其数据包含了精确的姿态与深度标注,支持三维场景重建算法的训练。北约海洋研究与实验中心(CMRE)发布的CMRE datasets包含侧扫与合成孔径声纳数据,特别适用于跨传感器域自适应研究,数据集中包含了同一区域的多种声纳成像结果,为跨模态学习提供了基准。

u012133341的博客 104

【TS第三讲】完善TS开发环境

TS开发环境搭建,依赖第三方库简化开发流程

商务合作欢迎私信我 1万+

2024年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~ 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。 那本篇文章就来整理一下Unity中一些常见的面试题,说不准就会面试的时候就会遇到! 本篇文章会将Unity所有方面的面试资料都融会贯通,绝对是2022年Unity面试领域最实用的文章啦!

努力前行,总会成为自己心中的那道光 17万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Json对象转Ts类

一 目标 推荐一款在线将Json对象转换为Ts类的工具:https://apihelper.jccore.cn/jsontool 可以帮助前端开发人员提高开发效率。 二 背景 Json是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。所以Json成为了前后端交互使用的主要格式。 Typescript作为一种前端开发语言,应用也越来越广,前端Angular开...

weixin_30338461的博客 2447

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

前端 new实例后销毁实例_前端开发-JavaScript对象的创建、定位与销毁(Sky Angel)...

关键词云在之前文章《前端开发-JavaScript键盘控制及动画实现(Sky Angel)》中,我们给出了一个简单网页应用(game)的开发。其中涉及到了键盘的控制,通过使用键盘事件处理用户点击操作行为。文本主要介绍JavaScript对象的生成(new)及对象的销毁。问题描述展示效果在该应用中需要将飞机、小鸟及降落伞、星星等作为对象处理。使用对象表示的好处在于通过属性设置实现各对象关键信息进行存...

weixin_39571403的博客 1719

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

前端面试-TS篇

前端面试-TS篇

weixin_53954177的博客 1064

前端之TypeScript(TS)

TS,全称TypeScript, 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6+ 的支持,它由微软开发,代码开源于 GitHub 上。1.始于JS,终于JS,最后编译成JS; 2.强大的类型系统; 3.先进的 JavaScript, 提供最新的JS特性;前提:有网;管理员权限的命令行工具(这样可以支持全局安装) 步骤: 1.命令行安装 2.检测 3.手动编译ts文件(→js) 第一个TS程序 (我猜是HelloWorld) (结果不是,虽然是类似的。但我强行写成HelloWorld

weixin_46372074的博客 2962

推荐项目:Morphic-TS - 打造强健的TypeScript业务对象生态

推荐项目:Morphic-TS - 打造强健的TypeScript业务对象生态 在现代软件开发中,特别是利用TypeScript构建复杂应用时,正确性、生产力和开发者体验成为了我们追求的关键要素。Morphic-TS——一个专为TypeScript设计的库,正是为了缓解编写及维护业务对象代码的痛点而生。通过这篇推荐文章,我们将探索Morphic-TS如何成为提升你的TypeScript项目质量的秘...

gitblog_00731的博客 925

【TS】九天学会TS语法——1.TypeScript 是什么

在了解TypeScript(简称TS)是什么之前,首先得知道什么是JavaScript(简称JS)。

m0_59873661的博客 2535
上一篇: 前端小技巧: TS实现深拷贝函数,考虑 Map, Set, 循环引用
下一篇: 设计模式: 面向对象思想,软件设计原则与设计模式之间的关系
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值