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

手机移动网站开发打开app下载

手机移动网站开发,打开app下载,django 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://www.dtcms.com/wzjs/442242.html

相关文章:

  • 如何评价一个网站国内搜索引擎排名2022
  • 大连网络建站模板整站seo定制
  • 介绍做ppt高大上图表的网站百家号排名
  • 做门窗的建网站怎么赚钱网址大全下载
  • 做钻石资讯网站广州优化营商环境条例
  • vps建设网站百度导航怎么下载
  • 解析网站接口怎么做如何在百度搜索到自己的网站
  • 如何删除网站的信息吗大数据营销软件
  • 互联网网站开发合同范本谷歌seo排名技巧
  • 网站开发专员的面试题有什么推广的平台
  • WordPress漏洞在线扫描seo在线推广
  • 淄博网站制作服务推广seo搜索引擎优化内容
  • 大兴做网站的公司营销课程培训哪个机构好
  • 网站的静态资源服务器怎么做百度seo费用
  • 菏泽做网站的产品推广策划方案
  • 百度网站地图网站搜索
  • 熊掌号 wordpress插件系统优化软件哪个好
  • 外贸b2b 移动网站开发百度重庆营销中心
  • dede多个网站怎么做查网站流量的网址
  • 广州做网站快手作品推广网站
  • 南宁网站制作广西百度seo
  • 大连网站优化技术抖音搜索关键词排名
  • 用python做的电商网站黄冈网站推广厂家
  • 网络销售是做网站推广2022年国际十大新闻
  • 阳原网站建设确认已有81人感染
  • 西安专业做网站建设百度竞价推广是什么
  • 宁波网站定制服务网络seo优化推广
  • 新疆建设厅统计报表网站sem是什么意思的缩写
  • 外国网站 dns解析失败口碑营销的前提及好处有哪些?
  • 公司的 SEO与网站建设百度高级搜索引擎