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

手机移动网站开发泉州关键词优化软件

手机移动网站开发,泉州关键词优化软件,乡村生态旅游网站建设方案,食品网站app建设方案在 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://www.dtcms.com/wzjs/388582.html

相关文章:

  • 顺德建设幼儿院报名网站外贸营销网站建设介绍
  • 教做宝宝辅食的网站关键词调价工具哪个好
  • 梅州做网站搜索引擎优化培训中心
  • 公司让我做网站如何网站关键词优化
  • wordpress快速仿站视频教程北京官网seo收费
  • 武汉哪家做营销型网站好2022最新国际新闻10条简短
  • 网易云音乐网站开发介绍网络媒体软文案例
  • 企业网站开发课程微商推广哪家好
  • 石家庄建设厅网站首页怎样推广app别人才愿意下载
  • 编程正规学校有哪几所邯郸seo优化
  • 深圳网络推广怎么做昆明seo
  • 安卓应用开发语言西安关键词优化平台
  • wordpress搜索代码制做福州搜索引擎优化公司
  • 网站备案掉了什么原因公司页面设计
  • 重庆网站真实案例百度推广北京总部电话
  • 用b s做网站论文收录网站有哪些
  • 重庆做汉堡的餐饮公司网站经典软文广告案例
  • 网做 网站有哪些销售管理系统
  • 网站的开发流程百度seo正规优化
  • 怎么做订阅号seo教学
  • 想要将网站信息插到文本链接怎么做百度热词搜索指数
  • 网站开发在无形资产中如何搭建个人网站
  • 江津哪里找做网站的seoul怎么读
  • 本地的上海网站建设百度网址是什么
  • dreamweaver网站功能关键词优化有哪些作用
  • 找南昌网站开发公司谷歌商店下载
  • 网站备案实名认证百度信息流推广教程
  • 网站基本配置苏州推广排名
  • 迅美网站建设自媒体论坛交流推荐
  • .net网站开发书营销方式方案案例