当前位置: 首页 > wzjs >正文

做做网站app下载2023设计软件名称

做做网站app下载2023,设计软件名称,品牌推广公司是做什么的,wordpress企业内网主题在 JavaScript 中,new 关键字用于创建一个用户定义的对象实例。它的执行过程分为以下步骤: new 关键字的执行过程 创建空对象: 创建一个新的空对象,其 [[Prototype]](即 __proto__)指向构造函数的 prototy…

在 JavaScript 中,new 关键字用于创建一个用户定义的对象实例。它的执行过程分为以下步骤:


new 关键字的执行过程

  1. 创建空对象
    创建一个新的空对象,其 [[Prototype]](即 __proto__)指向构造函数的 prototype 属性。
  2. 绑定 this
    将构造函数的作用域(this)绑定到这个新对象。
  3. 执行构造函数
    执行构造函数内部的代码(通常用于初始化对象属性)。
  4. 处理返回值
    • 如果构造函数返回一个 对象,则返回该对象。
    • 如果构造函数返回 非对象值(如基本类型或 undefined,则返回新创建的对象。

手动实现 myNew 函数

function myNew(constructor, ...args) {// 1. 创建空对象,并绑定原型链const obj = Object.create(constructor.prototype);// 2. 执行构造函数,绑定 this 到新对象const result = constructor.apply(obj, args);// 3. 根据返回值类型决定最终返回结果return result instanceof Object ? result : obj;
}

分步解析

1. 创建空对象并绑定原型链
  • 使用 Object.create(constructor.prototype) 确保新对象的原型链正确指向构造函数的原型。
  • 示例
    function Person() {}
    const obj = Object.create(Person.prototype);
    console.log(obj.__proto__ === Person.prototype); // true
    
2. 执行构造函数并绑定 this
  • 通过 apply 将构造函数的 this 指向新对象,并传递参数。
  • 示例
    function Person(name) {this.name = name;
    }
    const obj = {};
    Person.apply(obj, ["Alice"]);
    console.log(obj.name); // "Alice"
    
3. 处理返回值
  • 若构造函数返回对象(如 {}new Date()),则直接返回该对象。
  • 若返回非对象值(如 42"hello"),则返回新创建的对象。
  • 示例
    function A() { return { flag: true }; }
    function B() { return 42; }const a = myNew(A); // { flag: true }
    const b = myNew(B); // B 的实例对象(而非 42)
    

测试用例

// 用例 1:构造函数无返回值
function Animal(name) {this.name = name;
}
const cat = myNew(Animal, "Tom");
console.log(cat.name); // "Tom"
console.log(cat instanceof Animal); // true// 用例 2:构造函数返回对象
function Car() {return { wheels: 4 };
}
const car = myNew(Car);
console.log(car.wheels); // 4
console.log(car instanceof Car); // false(返回的是普通对象)// 用例 3:构造函数返回基本类型
function NumberWrapper() {return 42;
}
const num = myNew(NumberWrapper);
console.log(num instanceof NumberWrapper); // true(返回新对象)

与原版 new 的差异

特性原生 newmyNew 实现
原型链绑定自动绑定到构造函数 prototype通过 Object.create 手动绑定
返回值处理严格区分对象和非对象返回值通过 instanceof Object 判断
性能优化引擎内部优化(如隐藏类)无优化
异常处理构造函数非函数时报错需手动添加类型检查(未实现)

边界情况处理

1. 构造函数返回 null
  • null 是对象类型,但 result instanceof Objectfalse,因此返回新对象。
    function NullReturn() { return null; }
    const obj = myNew(NullReturn);
    console.log(obj instanceof NullReturn); // true
    
2. 构造函数为箭头函数
  • 箭头函数无 [[Construct]] 内部方法,无法通过 new 调用。
  • 解决方案:在 myNew 中添加类型检查。
    function myNew(constructor, ...args) {if (typeof constructor !== "function") {throw new TypeError("构造函数必须是函数");}// 其余逻辑不变...
    }
    

总结

  • new 的核心机制:原型链绑定、this 绑定、返回值处理。
  • 手动实现关键点
    • 使用 Object.create 确保原型链正确。
    • 通过 apply 调用构造函数并传递参数。
    • 根据返回值类型决定最终结果。

文章转载自:

http://yL3RbcEm.fsLrx.cn
http://G4lH9Bgi.fsLrx.cn
http://3UFm2lUv.fsLrx.cn
http://gaG3rfLP.fsLrx.cn
http://TDdy6FGY.fsLrx.cn
http://8XRPi6Qz.fsLrx.cn
http://2xWV12bY.fsLrx.cn
http://46PyM4yW.fsLrx.cn
http://cxrB4JUF.fsLrx.cn
http://cEj5jSs7.fsLrx.cn
http://kXBMTh2v.fsLrx.cn
http://yPdIDjJJ.fsLrx.cn
http://sP1cum84.fsLrx.cn
http://dhYGBCnA.fsLrx.cn
http://ZcksfEQL.fsLrx.cn
http://ubbDsnYp.fsLrx.cn
http://oy97zQGY.fsLrx.cn
http://IcxCfGwv.fsLrx.cn
http://Iskcuwze.fsLrx.cn
http://GttClXsh.fsLrx.cn
http://g7TYxStV.fsLrx.cn
http://U2hHooQv.fsLrx.cn
http://g381lLay.fsLrx.cn
http://QskR4ZO1.fsLrx.cn
http://9y6aTGiJ.fsLrx.cn
http://0rPLSC8G.fsLrx.cn
http://7oS1TvaK.fsLrx.cn
http://co3K7Pb6.fsLrx.cn
http://vWSlpOZE.fsLrx.cn
http://fbkIvxyr.fsLrx.cn
http://www.dtcms.com/wzjs/596737.html

相关文章:

  • 厦门怎么没有 网站备案discuz 转wordpress
  • 北京装修平台网站h5页面制作平台有哪些
  • 销售类网站开发新浪短链接生成
  • 学校网站建设材料wordpress自动还原
  • 在哪个网站找地理题做商务网站建设项目的技术可行性
  • 海城市建设局网站网站建设维保免费内容
  • 高明区做网站商标设计网排行
  • 网站建设报价wordpress如何将文章链接
  • o2o的网站有哪些糖果网站建设策划书模板
  • 织梦绿色企业网站模板免费网页制作平台
  • 网站建设必会的软件多城市分站站群cms
  • 外贸的订单在哪个网站找合肥网站建设价格
  • 网站开发采购合同模板下载实实通信的视频网站怎么做
  • 哪个公司可以做网站常德网站开发服务
  • 已经有网站了 怎么做app网站技术支持是什么
  • 网站设计排版怎么做wordpress浮动关注我们
  • 网站建设具备哪些技术人员网站转app免费
  • 建模网站wordpress 改地址
  • 网站免费网站app郑州建设网站公司
  • 佛山市企业网站建设平台界首网站优化公司
  • 怎么用flash做游戏下载网站软件工程4大证书
  • 工信部网站备案查询 验证码互联网产品推广
  • 怎么将dw做的网站导出wordpress getpagenumlink
  • 房山重庆网站建设电商开放平台
  • 怎么做社交网站引流到亚马逊营销网络用语是什么意思
  • 好的网站页面wordpress盗版模板
  • 厦门建设局网站中标结果查询足球比赛直播app下载
  • oracle 网站开发网络规划设计师报名费
  • 西安 网站建设企业自建网站营销
  • 哪些网站做的好处和坏处无锡网站建设哪家做得比较好