目录

JavaScript 对象构造器


示例

function Person(first, last, age, eye) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eye;
}
亲自试一试»

笔记

使用大写首字母命名构造函数被认为是一种很好的做法。

对这个

在构造函数中this没有值。它是新对象的替代品。的值this当新对象创建时,将成为新对象。

也可以看看:

JavaScriptthis教程


对象类型(蓝图)(类)

前面章节中的示例有限。他们只创建单个对象。

有时我们需要一个“蓝图" for creating many objects of the same "类型”。

创建 "object type" 的方法是使用对象构造器

在上面的例子中,function Person()是一个对象构造器。

相同类型的对象是通过调用构造函数来创建的new关键字:

const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
亲自试一试»


什么是this

在 JavaScript 中,this关键字指的是对象

哪个对象取决于如何this正在被调用(使用或调用)。

这个this关键字根据其使用方式指代不同的对象:

在对象方法中,this指的是对象
独自的,this指的是全局对象
在一个函数中,this指的是全局对象
在函数中,在严格模式下,thisundefined
在一次活动中,this指的是元素收到该事件的。
方法如call(),apply(), 和bind()可以参考this任何物体

笔记

this不是变量。这是一个关键字。您无法更改的值 this

也可以看看:

JavaScriptthis教程


向对象添加属性

向现有对象添加新属性很容易:

示例

myFather.nationality = "English";
亲自试一试 »

该属性将添加到 myFather 中。不是给我妈妈的。 (不向任何其他人反对)。


向对象添加方法

向现有对象添加新方法很容易:

示例

myFather.name = function () {
  return this.firstName + " " + this.lastName;
};
亲自试一试 »

该方法将被添加到 myFather.不是给我妈妈的。 (不向任何其他人反对)。


向构造函数添加属性

您不能像向现有对象添加新属性一样向对象构造器添加新属性:

示例

Person.nationality = "English";
亲自试一试 »

要将新属性添加到构造函数,必须将其添加到构造函数:

示例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.nationality = "English";
}
亲自试一试 »

这样对象属性就可以有默认值。


向构造函数添加方法

您的构造函数还可以定义方法:

示例

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.name = function() {
    return this.firstName + " " + this.lastName;
  };
}
亲自试一试 »

您不能像向现有对象添加新方法一样向对象构造器添加新方法。

向对象构造器添加方法必须在构造函数内部完成:

示例

function Person(firstName, lastName, age, eyeColor) {
  this.firstName = firstName; 
  this.lastName = lastName;
  this.age = age;
  this.eyeColor = eyeColor;
  this.changeName = function (name) {
    this.lastName = name;
  };
}

changeName() 函数将 name 的值分配给该人的 lastName 属性。

现在您可以尝试:

myMother.changeName("Doe");
亲自试一试 »

JavaScript 知道您通过 "substituting" 谈论的是谁this我的母亲


内置 JavaScript 构造函数

JavaScript 具有用于本机对象的内置构造函数:

new String()    // A new String object
new Number()    // A new Number object
new Boolean()   // A new Boolean object
new Object()    // A new Object object
new Array()     // A new Array object
new RegExp()    // A new RegExp object
new Function()  // A new Function object
new Date()      // A new Date object
亲自试一试 »

这个Math()对象不在列表中。Math是一个全局对象。这new关键字不能用于Math


你可知道?

正如您在上面看到的,JavaScript 具有原始数据类型的对象版本String,Number, 和Boolean。但没有理由创建复杂的对象。原始值要快得多:

使用字符串文字""代替new String()

使用数字文字50代替new Number()

使用布尔文字true / false代替new Boolean()

使用对象字面量{}代替new Object()

使用数组文字[]代替new Array()

使用模式文字/()/代替new RegExp()

使用函数表达式() {}代替new Function()

示例

let x1 = "";             // new primitive string
let x2 = 0;              // new primitive number
let x3 = false;          // new primitive boolean

const x4 = {};           // new Object object
const x5 = [];           // new Array object
const x6 = /()/          // new RegExp object
const x7 = function(){}; // new function
亲自试一试 »

字符串对象

通常,字符串被创建为基元:firstName = "John"

但是字符串也可以使用以下方法创建为对象new关键字:
firstName = new String("John")

了解为什么字符串不应在本章中创建为对象JS 字符串


数字对象

通常,数字被创建为基元:x = 30

但是数字也可以使用以下方法创建为对象new关键字:
x = new Number(30)

了解为什么数字不应在本章中创建为对象JS 数字


布尔对象

通常,布尔值被创建为基元:x = false

但布尔值也可以使用以下方法创建为对象new关键字:
x = new Boolean(false)

了解为什么布尔值不应该在本章中创建为对象JS 布尔值