function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
亲自试一试»
使用大写首字母命名构造函数被认为是一种很好的做法。
在构造函数中this
没有值。它是新对象的替代品。的值this
当新对象创建时,将成为新对象。
前面章节中的示例有限。他们只创建单个对象。
有时我们需要一个“蓝图" 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");
亲自试一试»
在 JavaScript 中,this
关键字指的是对象。
哪个对象取决于如何this
正在被调用(使用或调用)。
这个this
关键字根据其使用方式指代不同的对象:
在对象方法中,this 指的是对象。 |
独自的,this 指的是全局对象。 |
在一个函数中,this 指的是全局对象。 |
在函数中,在严格模式下,this 是undefined 。 |
在一次活动中,this 指的是元素收到该事件的。 |
方法如call() ,apply() , 和bind() 可以参考this 到任何物体。 |
向现有对象添加新属性很容易:
该属性将添加到 myFather 中。不是给我妈妈的。 (不向任何其他人反对)。
向现有对象添加新方法很容易:
该方法将被添加到 myFather.不是给我妈妈的。 (不向任何其他人反对)。
您不能像向现有对象添加新属性一样向对象构造器添加新属性:
要将新属性添加到构造函数,必须将其添加到构造函数:
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 属性。
JavaScript 知道您通过 "substituting" 谈论的是谁this和我的母亲。
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 布尔值。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!