说说js里new一个实例具体做了些什么

本文主要介绍了JS中new操作符的内部原理,包括创建空对象、设置原型、执行构造函数代码以及返回对象等步骤。还通过验证不同返回类型的情况,进一步说明了new的工作机制。最后,为加深理解,实现了一个自定义的new函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
js里我们经常看到类似上面的代码,从表面上看就知道new了一个person函数的实例对像tom,new时内部具体做了些什么呢,主要就做了这4件事
1.创建一个空对像(假设叫obj)
2.设置这个空对像的__proto__指向构造函数的prototype(obj.proto= person.prototype)
3.让构造函数里的this指向这个空对像,然后执行构造函数里的代码(this.name=“tom”,等价于obj.name=“tom”)
4.如果函数没return语句,或者return基本数据类型(number,boolean,string,undefined,null),则最终返回这个生成的对像,如果函数return一个引用类型的数据,那最终返回这个引用类型

第四点需要验证一下
在这里插入图片描述
可以看到return number基本类型1时,还是返回的那个内部生成的对像

在这里插入图片描述

可以看到return一个对像时,最终返回的是这个对像,另外我们看到这个对像里没有name属性,这说明什么,说明person函数里的this指向的还是内部生成的那个对像,并没有指向我们返回的这个对像

说了这么多,是不是对new的实质了解了,我们来自己实现个new函数加深下加深下理解
在这里插入图片描述
看看是不是和文章最开始打印出的结果一样的,这样我们就简单实现了一个自己的new

在使用SDK订阅合约事件(例如BSV主网上合约部署后的事件)时,通常会涉及监听智能合约中的特定函数调用或者状态变化。这以JavaScript的BSC SDK(如bsc-sdk)为例: 首先,你需要安装Binance Smart Chain的官方SDK库,可以使用npm(Node.js包管理器)进行安装: ```bash npm install @binance-chain/web3j ``` 然后,假设你已经有了合约ABI(应用程序二进制接口),这包含了合约的所有函数和事件声明。你可以创建一个Web3实例,并连接到BSC节点: ```javascript const Web3 = require('@binance-chain/web3j'); const web3 = new Web3('https://mainnet.bscscan.com'); // 连接到BSC主网节点 web3.setMode(Web3j.HttpMode.HTTP); // 如果使用WebSocket模式,改为Web3j.HttpMode.WEB_SOCKET // 解析ABI获取合约实例 const contractAbi = []; // 你的合约ABI数组 const deployedContractAddress = '0x...'; // 已部署合约地址 const contract = new SafeERC20(web3, deployedContractAddress, contractAbi); ``` 接着,你可以订阅某个事件,通常是`onEvent`方法配合监听器: ```javascript contract.events.Deployment().subscribe((event) => { console.log('合约部署事件:', event); // 在这处理事件数据 }); ``` 这假设合约有一个名为`Deployment`的事件。当合约部署后,这个监听器会被触发。 注意: 1. `event`对象通常包含事件名称、参数和发生时间等信息。 2. 为了持续接收事件,你需要保持程序运行,直到取消订阅或者关闭连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值