美文网首页
不积跬步之JavaScript new Class()的时候发生

不积跬步之JavaScript new Class()的时候发生

作者: 雨飞飞雨 | 来源:发表于2020-12-08 00:13 被阅读0次

一个问题:在JavaScriptnew Class()一个对象的时候,具体会发生什么?

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

const car1 = new Car('Eagle', 'Talon TSi', 1993);

new操作符会进行如下的执行过程:

  1. 创建一个空的简单对象(即{})
  2. 链接该对象(设置该对象的constructor)
  3. 将步骤1新创建的对象作为this的上下文
  4. 如果该函数没有返回对象,则返回this

创建一个用户自定义的对象需要两步:

  1. 通过编写函数来定义对象类型。
  2. 通过new来创建对象实例。

创建一个对象类型,需要创建一个指定其名称和属性的函数;对象的属性可以指向其他对象,看下面的例子:、

当代码new Foo(...)执行时,会发生以下事情:

  1. 一个继承自 Foo.prototype 的新对象被创建。

  2. 使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。

  3. 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)

你始终可以对已定义的对象添加新的属性。例如,car1.color = "black" 语句给 car1 添加了一个新的属性 color,并给这个属性赋值 "black"。但是,这不会影响任何其他对象。要将新属性添加到相同类型的所有对象,你必须将该属性添加到 Car 对象类型的定义中。

你可以使用Function.prototype 属性将共享属性添加到以前定义的对象类型。这定义了一个由该函数创建的所有对象共享的属性,而不仅仅是对象类型的其中一个实例。下面的代码将一个值为nullcolor属性添加到car类型的所有对象,然后仅在实例对象car1中用字符串"black" 覆盖该值.

参考自MDN

相关文章

  • 不积跬步之JavaScript new Class()的时候发生

    一个问题:在JavaScript中new Class()一个对象的时候,具体会发生什么? new操作符会进行如下的...

  • 不积跬步之JavaScript的数组

    为学习<数据结构与算法>做准备,我们有必要梳理一下数组,因为我们需要它来模拟各种数据结构,如栈,列表,队列等。而实...

  • 不积跬步之JavaScript 词法作用域

    昨天圣诞节,没有写,今天写两篇。奥利给!---现在是2021-1-4 还好不算晚,才隔了几天。 词法作用域 在第一...

  • 不积跬步之漫谈JavaScript的递归函数

    最近在看中看到arguments.callee这个属性,才知道JavaScri...

  • 不积跬步

    2018/10/25 星期四 晴 没想到二姐的高价小收音机比手机的辐射要强,放在床边睡觉,...

  • 不积跬步

    “不积跬步无以至千里”常用来激励。 可在自己身上发掘这句名言,却只有垃圾、肥肉和慢。 一个上午,断断续续收拾了两个...

  • 不积跬步

    生活中看起不起眼的事情,对一些人来说就是财富机遇 朋友在我们单位上班,也属于从别的单位挖过来的,老板慧眼识珠,两人...

  • 不积跬步之JavaScript什么是作用域 ?

    想到坚持这件小事,我为2020年的最后一个月的最后这段时间给自己开个好头。那就从每天坚持学习这件小事开始吧。每天一...

  • 点滴积累成就精彩演讲

    冰冻三尺,非一日之寒。 ——王充不积跬步,无以...

  • 不积跬步之快速排序

    快速排序使用了分治思想来实现。 和冒泡排序一样,快速排序也属于交换排序,通过元素直接的比较和交换位置来达到排序的目...

网友评论

      本文标题:不积跬步之JavaScript new Class()的时候发生

      本文链接:https://www.haomeiwen.com/subject/zpnxgktx.html