JavaScript构造器和操作符“new”
时间:2021-11-25 作者:匿名
构造器和操作符 "new"
常规的 {...} 语法允许创建一个对象。但是我们经常需要创建许多类似的对象,例如多个用户或菜单项等。
这可以使用构造函数和 "new" 操作符来实现。
构造函数
构造函数在技术上是常规函数。不过有两个约定:
1、它们的命名以大写字母开头。
2、它们只能由 "new" 操作符来执行。
例如:
function User(name) { this.name = name; this.isAdmin = false; } let user = new User("Jack"); alert(user.name); // Jack alert(user.isAdmin); // false
当一个函数被使用 new 操作符执行时,它按照以下步骤:
1、一个新的空对象被创建并分配给 this。
2、函数体执行。通常它会修改 this,为其添加新的属性。
3、返回 this 的值。
所以在这里 new User("Jack") 的结果是相同的对象:
let user = { name: "Jack", isAdmin: false };
现在,如果我们想创建其他用户,我们可以调用 new User("Ann"),new User("Alice") 等。这样就不需要定义每个用户的时候,都重新写一遍详细的属性和值。
省略括号
顺便说一下,如果没有参数,我们可以省略 new 后的括号:
let user = new User; // <-- 没有参数 // 等同于 let user = new User();
虽然规范允许这样书写,但是省略括号是一种“坏习惯”。
构造器中的方法
使用构造函数来创建对象会带来很大的灵活性。构造函数可能有一些参数,这些参数定义了如何构造对象以及要放入什么。
当然,我们不仅可以将属性添加到 this 中,还可以添加方法。
例如,下面的 new User(name) 用给定的 name 和方法 sayHi 创建了一个对象:
function User(name) { this.name = name; this.sayHi = function() { alert( "My name is: " + this.name ); }; } let john = new User("John"); john.sayHi(); // My name is: John
总结
构造函数,或简称构造器,就是常规函数,但大家对于构造器有个共同的约定,就是其命名首字母要大写。
构造函数只能使用 new 来调用。这样的调用意味着在开始时创建了空的 this,并在最后返回填充了值的 this。
我们可以使用构造函数来快速创建多个类似的对象。