对象
目录
创建对象
创建新对象有两种不同的方法:
- 使用 Object 定义并创建对象的实例。
- 使用函数来定义对象,然后创建新的对象实例。
new Object
在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
Object 构造函数创建一个对象包装器。
Object 构造函数,会根据给定的参数创建对象,具体有以下情况:
- 如果给定值是 null 或 undefined,将会创建并返回一个空对象。
- 如果传进去的是一个基本类型的值,则会构造其包装类型的对象。
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
- 当以非构造函数形式被调用时,Object 的行为等同于 new Object()。
语法格式:
// 以构造函数形式来调用
new Object([value])
字面量创建
也可以使用对象字面量来创建对象,语法格式如下:
var myObject = {
key1: value1,
key2: value2,
// 更多键值对...
};
- myObject: 变量名,用于引用整个对象。
- key1, key2: 属性名称,可以是字符串或标识符。
- value1, value2: 属性的值,可以是任意 JavaScript 数据类型,包括数字、字符串、布尔值、函数、数组、甚至其他对象。
使用循环遍历对象属性
JavaScript for...in 语句循环遍历对象的属性。
语法
for (variable in object)
{
执行的代码……
}
注意: for...in 循环中的代码块将针对每个属性执行一次。
示例:
var person={fname:"John",lname:"Doe",age:25};
for (x in person)
{
txt=txt + person[x];
}
对象中的方法
this
this
关键字在函数体内使用时,其值取决于函数是如何被调用的。它通常指向调用该函数的对象。但是,this
的行为在JavaScript中可能有些复杂,因为它不是由函数声明的位置决定的,而是由函数调用的方式决定的。
- 在全局环境中,
this
通常指向全局对象(在浏览器中是window
,在Node.js中是global
)。 - 在对象的方法中,
this
指向调用该方法的对象。 - 在构造函数中,
this
指向新创建的对象实例。 - 使用箭头函数时,
this
被绑定到其定义时的上下文,而不是执行时的上下文。
apply
apply
方法调用一个函数,同时为其设置 this
值(称为函数运行的上下文)和一个数组(或类数组对象)作为参数列表。
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = {
name: 'John'
};
greet.apply(person, ['Hello', '!']); // 输出: Hello, John!
在这个例子中,greet.apply(person, ['Hello', '!'])
调用 greet
函数,并将 this
设置为 person
对象,同时将 ['Hello', '!']
作为参数传递给 greet
函数。
call
call
方法的作用与 apply
类似,但它接受一个参数列表作为单独的参数,而不是一个数组。
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = {
name: 'John'
};
greet.call(person, 'Hello', '!'); // 输出: Hello, John!
在这个例子中,greet.call(person, 'Hello', '!')
调用 greet
函数,并将 this
设置为 person
对象,同时将 'Hello'
和 '!'
作为参数传递给 greet
函数。
总结
this
关键字用于在函数体内部引用当前对象。apply
和call
方法用于在调用函数时显式地设置this
的值,并传递参数。apply
接受一个数组(或类数组对象)作为参数列表,而call
接受单独的参数。- 使用这些方法可以在不同上下文中重用函数,使得JavaScript更加灵活和强大。