js中new操作符

1.什么是new?

在JS中,new的作用是通过构造函数来创建一个实例对象(和普通函数不一样,当函数用作构造函数时,首字母一般要大写)

function Foo(name) {
    this.name = name;
}
console.log("new Foo('mm')的类型:",typeof new Foo('mm')); // object
console.log("Foo的类型:",typeof Foo); // function

 2.new经历了什么过程?

Foo明明只是一个函数,可是为什么new Foo()执行后会突然返回一个对象呢?
我们从结果出发可以推断出,既然返回了一个对象,那么这事肯定和对象有关系。

实际上new帮我们做了这样几件事:

  1. 帮我们创建了一个空对象,例如:obj;
  2. 将空对象原型的内存地址__proto__指向函数的原型对象;
  3. 利用函数的call方法,将原本指向window的绑定对象this指向了obj。(这样一来,当我们向函数中再传递实参时,对象的属性就会被挂载到obj上。)
  4. 利用函数返回对象obj。

3.new的过程分析

function Foo(name) { 
this.name = name; return this; 
} 
var obj = {}; 
obj.__proto__ = Foo.prototype; // Foo.call(obj, 'mm');
 var foo = Foo.call(obj, 'mm');
 console.log(foo);

 

分析:
首先预编译,声明提升,解释执行。
执行时按照顺序来进行,

  • obj指向空对象;
  • obj的原型地址指向构造函数Foo的原型对象;
  • 执行Foo.call(obj, 'mm');
    • this.name = name; 通过函数的call方法将this绑定到obj(也就是说this就是obj),实参mm传入构造函数Foo中,这样this.name = 'mm',那么obj.name = 'mm',也就是说name属性被挂载到obj对象上。
    • return this; 就是return obj,这样obj这个对象就被返回出来了。
  • 将结果赋值给变量foo。
  • 打印结果。

 

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
new 运算符在 JavaScript 用于实例化一个类并创建一个对象。尽管 JavaScript 的所有东西都是对象,但通过 new 运算符来创建对象有其特殊的作用。使用 new 运算符后,JavaScript 引擎会进行一系列的步骤来完成对象的创建和初始化。 具体来说,使用 new 运算符时,JavaScript 引擎会执行以下步骤: 1. 创建一个新的空对象。 2. 将新对象的原型指向类的原型对象,以便实现继承。 3. 将类的构造函数作为方法来调用,并将新对象作为构造函数的上下文(即 this)。 4. 如果构造函数返回一个对象,则返回该对象;否则,返回新创建的对象。 简言之,new 运算符通过使用类的构造函数来创建一个新对象,并且确保该对象具有正确的原型链和上下文。 引用提到了 new 运算符的作用和意义,它允许我们在 JavaScript 创建一个对象,这样我们可以根据类的定义来实例化对象。引用给出了一个伪代码示例,展示了 JavaScript 引擎在执行 new 运算符时的工作流程。引用进一步建议了如何加深对 new 运算符的理解。 总结起来,JavaScript new 运算符用于实例化一个类并创建一个对象,它通过一系列步骤来完成对象的创建和初始化,确保对象具有正确的原型链和上下文。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JS核心系列:理解 new 的运行机制](https://blog.csdn.net/gongzhuxiaoxin/article/details/52625842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值