翻译自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

new操作符可以实例化一个用户自定义对象,或者一个含有构造方法的内置对象。很明显,这句话的意思指用户采用{},或者new Object创建的对象。而后者内置对象指Function,Array,Date等。

语法

new constructor[([arguments])]

参数

constructor

构造器指指定了对象实例类型的函数。

arguments

参数指构造器调用所需要的一列值。

描述

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

通过写个函数自定义对象类型;

使用new创建一个对象实例。

定义一个对象类型,通过创建一个函数指定它的属性和方法。一个对象可以拥有一个来自它的另一对象的属性。举例:

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

一个新的对象创建,继承自Foo.prototype;

构造器函数被传参调用,并被绑定到新创建的对象,new Foo 等于 new Foo(),如果没有指定参数列表,将无参调用;

对象由构造器函数返回,成为整个新表达式的结果,如果构造器函数没有显式的返回对象,那第一步产生的对象将替代它被使用。(通常构造器函数都不返回值,也可以这么做如果想覆盖掉常规的对象创建进程)。

你随时都可以添加一个属性到先前定义的对象中。比如说,声明car1.color = "black"颜色属性到car1,并设置其值为black。然而他不会影响所有的对象。若要添加一个新属性到所有对象的类里,那么你需要将这个属性添加进所有car对象类型的定义中,也即构造函数的prototype中。

可以添加一个共享属性到先前的对象类里,通过使用函数的prototype属性。这样定义的属性将被所有来自这个类函数的实例所应用到。而不仅仅是通过单个实例对象属性设置。下面的代码添加了一个值为null的color属性到所有car实例的共享属性里,重写了仅仅在单个实例car1中定义的颜色black,更多信息,查看prototype

function Car() {}
car1 = new Car(); console.log(car1.color); // undefined Car.prototype.color = null;
console.log(car1.color); // null car1.color = "black";
console.log(car1.color); // black

举例:

对象类和对象实例

Suppose you want to create an object type for cars. You want this type of object to be called car, and you want it to have properties for make, model, and year. To do this, you would write the following function:

假设你想创建一个cars的对象类,这个对象类可以被调用,他拥有make,model,year属性。完成这个功能,可以如下来编写函数:

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

好,你可以创建一个名为mycar的对象了:

var mycar = new Car("Eagle", "Talon TSi", );

这个声明创建了mycar并且给定了特定属性值。

创建另外一个:

var kenscar = new Car("Nissan", "300ZX", );

对象的属性值是另外一个对象:

function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var rand = new Person("Rand McNally", , "M");
var ken = new Person("Ken Jones", , "M");
function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
}
var car1 = new Car("Eagle", "Talon TSi", , rand);
var car2 = new Car("Nissan", "300ZX", , ken);

car1及car2对象实例的owner属性接收到了来自第三个参数的对象值。可通过类似car1.owner.name来访问。

如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function),则new函数与直接调用函数产生的结果等同。

new操作符(翻译自mozilla.org)的更多相关文章

  1. Unity 自定义"=="操作符 [翻译来源blogs.unity3d,2014/05]

    主要内容来源 https://blogs.unity3d.com/cn/2014/05/16/custom-operator-should-we-keep-it/ 在我们代码里,如果有这样的代码: i ...

  2. Mozilla对HTML5规范支持列表

    翻译自Mozilla Developer Network 在2009年10月28日,HTML 5规范草稿在网络超文本应用技术工作组(WHATWG)中基本出于最后定稿阶段,这意味着HTML 5标准基本定 ...

  3. [CLR via C#]11. 事件

    一. 设计要公开事件的类型 如果类型定义了事件成员,那么类型(或类型实例)就可以通知其他对象发生了一些特定的事情. 例如,Button类提供了一个名为Click的事件.应用程序中的一个或多个对象可能想 ...

  4. C#相等性 - “==”

    今天写一下C#里的“==”这个操作符. 原始类型 假象 在刚学C#的时候,我以为C#里的==和.NET里的object.Equals()方法是一样的,就是一个语法糖而已.其实它们的底层机制是不一样的, ...

  5. (摘)Entity Framework Core 2.1带来更好的SQL语句生成方案

    微软发布了Entity Framework Core2.1,为EF开发者带来了很多期待已久的特性.EF Core 2.1增加了对SQL GROUP BY的支持,支持延迟加载和数据种子等. EF Cor ...

  6. 重温CLR(七 ) 属性和事件

    无参属性 许多类型都定义了能被获取或更高的状态信息.这种状态信息一般作为类型的字段成员实现.例如一下类型包含两个字段: public sealed class Employee{ public str ...

  7. C#每天进步一点--事件

    事件:如果类型定义了事件成员,那么类型就可以通知其他对象发生了特定的事情.例如,Button类提供了一个名为Click的事件.应用程序中的一个或者多个对象可能想接收关于这个事件的通知,以便在Butto ...

  8. 计算机二级Python

    概述 计算机二级在近两年新加了python的选择,趁机考了一下,顺便记录一下学习的一些所获 第一章 程序设计语言概述 考纲考点: 这一部分主要是介绍计算机语言的公共常识,一些尝试我就按照自己的理解方式 ...

  9. 翻译:赋值操作符(:=)(已提交到MariaDB官方手册)

    本文为mariadb官方手册:赋值操作符(:=)的译文. 原文:https://mariadb.com/kb/en/assignment-operator/ 我提交到MariaDB官方手册的译文:ht ...

随机推荐

  1. 关于已部署的WCF服务升级的问题

    在日常的开发过程中,我们会经常迭代发布不同的版本,所以WCF服务的接口也会经常处于变动的状态,比如在传递实体类中新加一个字段.修改参数名称等等关于服务升级的问题.但是我们不可能让已发布的版本重新引用新 ...

  2. BZOJ 1834 网络扩容(最大流+费用流)

    对于第一问,直接求最大流. 对于第二问,建源点s和汇点t,s连1容量为INF,费用为0的边,n连t容量为最大流+k,费用为0的边.这样就把最大流限制为最多增加k了. 限制需要求扩充的最小费用,原图的边 ...

  3. Events-事件-红绿灯

    Event: 用于线程之间状态的同步.对全局变量不断地做修改. Event=threading.Event()  #生成1个event的对象 Event.wait() #等着设定全局变量.检测标志位是 ...

  4. [洛谷P4900]食堂

    题目大意:$n(n\leqslant10^6)$组询问,每组询问给出$l,r(l,r\leqslant10^6)$,求($\{\dfrac ij\}$表示$\dfrac ij$的小数部分): $$\s ...

  5. BZOJ3140:[HNOI2013]消毒——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 https://www.luogu.org/problemnew/show/P3231 最近在 ...

  6. 分享几款常用的API/文档浏览器

    1.Dash 支持平台:Mac  iOS 官网:https://kapeli.com/dash 2.Zeal 支持平台:Linux Windows 官网:https://zealdocs.org/ G ...

  7. jsp电子商务系统之六 订单篇1

    常规一个商品一个订单 多个商品一个订单 订单只有提交才能结算 付款页面 代码实现,主要是Servlet代码和Service业务层的代码,此处业务层,对多个dao的操作更为明显,体现业务二字!!! pa ...

  8. Mac将应用拖入Finder工具栏

    在Finder的工具栏上放一下应用,方便打开对应的文件,可以 Command + 鼠标拖动应用,将应用拖入Finder工具栏中. 本人的Finder工具栏上添加了vscode这个应用

  9. ES6 Set,WeakSet,Map,WeakMap

    1. Set Set是一个集合,里面的值都是唯一的,没有重复的.Set中可以是任何数据类型,并且添加数据时会进行严格比较,重复数据无法加入. 2. WeakSet 弱引用Set.只能存储对象,不能存储 ...

  10. 51nod 1217 Minimum Modular(数论+暴力)

    根据抽屉原理显然m>=(n-K) 于是在[n-K,max(a1..an)+1]的范围中枚举m 考虑K=0的做法... 如果a[i]≡a[j](mod m),则有m|(a[i]-a[j]),只要O ...