手写Js代码 (1) ------ new方法

本文探讨了JavaScript中构造函数的实现原理,通过自定义new操作符来模拟构造函数的过程,展示了如何创建对象实例并正确处理构造函数的返回值。同时,对比了自定义new与标准new操作符在实例化过程中的异同。
function _new(target,...args){
    // 定义一个返回的对象
    let obj = {};
    if(target.prototype !== null){
        // 对象的原型对象指向目标的构造函数
        obj = Object.create(target.prototype);
    }
    // 将this指针指向返回的对象
    const result = target.apply(obj,args);
    if((typeof result === ('object' || 'function')) && result !== null){
        console.log("返回值:"+result)
        // 如果返回值是function或者object(不是null),返回返回值;
        return result;
    }
    return obj;
}
function Person (name,age){
    this.name = name;
    this.age = age;
    this.say = function () {
        console.log("I am " + this.name)
    }
    return 1;
}
 
//通过new创建构造实例
let person1 = new Person("Curry",18);
console.log(person1.name);      //"Curry"
console.log(person1.age);       //18
person1.say();      //"I am Curry'
 console.log(person1);
//通过realize()方法创造实例
let person2 = _new(Person,"Curry",18);
console.log(person2.name);      //"Curry"
console.log(person2.age);       //18
person2.say(); 
console.log(person2);
代码下载地址: https://pan.quark.cn/s/bc087ffa872a "测控电路课后习题详解"文件.pdf是一份极具价值的学术资料,其中系统地阐述了测控电路的基础理论、系统构造、核心特性及其实际应用领域。 以下是对该文献的深入解读和系统梳理:1.1测控电路在测控系统中的核心功能测控电路在测控系统的整体架构中扮演着不可或缺的角色。 它承担着对传感器输出信号进行放大、滤除杂音、提取有效信息等关键任务,并且依据测量与控制的需求,执行必要的计算、处理与变换操作,最终输出能够驱动执行机构运作的指令信号。 测控电路作为测控系统中最具可塑性的部分,具备易于放大信号、转换模式、传输数据以及适应多样化应用场景的优势。 1.2决定测控电路精确度的关键要素影响测控电路精确度的核心要素包括:(1)噪声与干扰的存在;(2)失调现象与漂移效应,尤其是温度引起的漂移;(3)线性表现与保真度水平;(4)输入输出阻抗的特性影响。 在这些要素中,噪声干扰与失调漂移(含温度效应)是最为关键的因素,需要给予高度关注。 1.3测控电路的适应性表现测控电路在测控系统中展现出高度的适应性,具体表现在:* 具备选择特定信号、灵活实施各类转换以及进行信号处理与运算的能力* 实现模数转换与数模转换功能* 在直流与交流、电压与电流信号之间进行灵活转换* 在幅值、相位、频率与脉宽信号等不同参数间进行转换* 实现量程调整功能* 对信号实施多样化的处理与运算,如计算平均值、差值、峰值、绝对值,进行求导数、积分运算等,以及实现非线性环节的线性化处理、逻辑判断等操作1.4测量电路输入信号类型对电路结构设计的影响测量电路的输入信号类型对其电路结构设计产生显著影响。 依据传感器的类型差异,输入信号的形态也呈现多样性。 主要可分为...
(IHAOAVOABPvsAOBPvsAVOABPvsPSOBP)非洲秃鹫融合天鹰优化BP天鹰优化BP非州秃鹫BP粒子群(Matlab代码实现)内容概要:本文档主要围绕多种智能优化算法在不同工程领域的应用展开,重点介绍了非洲秃鹫优化算法(AVOA)、天鹰优化算法(AO)与BP神经网络的融合改进,并与其他经典算法如粒子群优化(PSO)进行对比分析。所有案例均提供Matlab代码实现,涵盖电力系统优化、路径规划、微电网调度、无人机控制、信号处理等多个方向,强调算法的科研复现能力与实际仿真价值。文档还展示了丰富的技术服务体系,涉及机器学习、深度学习、路径规划、通信与电力系统等多个前沿领域。; 适合人群:具备一定Matlab编程基础,从事科研工作或工程仿真的研究生、高校教师及企业研发人员,尤其适用于从事智能优化算法研究与应用的相关技术人员。; 使用场景及目标:①用于学术论文复现,特别是SCI/EI期刊中关于优化算法的实验部分;②为电力系统、无人机、储能调度等领域提供算法仿真技术支持;③帮助研究人员快速掌握多种智能算法的实现方法并进行性能对比。; 阅读建议:建议结合文档提供的网盘资源下载完整代码,按照目录顺序逐步学习,重点关注算法原理与Matlab实现的结合方式,同时可将文中案例作为自身课题的参考模板进行二次开发与创新。
### 实现 `new` 操作符的手写代码 在 JavaScript 中,`new` 操作符用于创建一个用户定义的对象类型的实例或内置对象类型之一。手写实现 `new` 的核心在于模拟其内部机制,包括以下几个关键步骤: 1. 创建一个新的空对象。 2. 将新对象的原型指向构造函数的 `prototype` 属性。 3. 将构造函数的作用域绑定到新对象上(即改变 `this` 的指向)。 4. 执行构造函数中的代码。 5. 根据构造函数的返回值决定最终返回的对象:如果返回的是引用类型,则返回该引用类型;否则返回新创建的对象。 以下是手写实现 `new` 操作符的完整代码示例: ```javascript function myNew() { // 获取构造函数 const constructor = Array.prototype.shift.call(arguments); // 创建一个新对象,并将其原型指向构造函数的 prototype const newObj = Object.create(constructor.prototype); // 绑定 this 并执行构造函数 const result = constructor.apply(newObj, arguments); // 判断返回值是否为引用类型 const isObjectOrFunction = typeof result === 'object' || typeof result === 'function'; return isObjectOrFunction && result !== null ? result : newObj; } ``` #### 使用示例 ```javascript function Person(name, age) { this.name = name; this.age = age; } Person.prototype.sayHello = function() { console.log(`Hello, my name is ${this.name}, I am ${this.age} years old.`); }; const person1 = myNew(Person, 'Alice', 25); person1.sayHello(); // 输出: Hello, my name is Alice, I am 25 years old. console.log(person1); // 输出: Person { name: 'Alice', age: 25 } ``` 上述代码中,`myNew` 函数模拟了 `new` 操作符的行为,首先通过 `Object.create()` 创建了一个以构造函数原型为原型的新对象,然后通过 `apply()` 将构造函数的 `this` 指向新对象并执行构造函数。最后判断构造函数是否有返回值且该返回值是否为引用类型,如果是,则返回该返回值;否则返回新创建的对象[^4]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值