有人说,在JavaScript中,万物皆对象。其实这种说法不全对,准确的地说,除了基本数据类型(null
,Undefined
,Number
,Boolean
,BigInt
,String
)之外,都可以视为对象,这其中包括了数组Array
和函数function
等。
事实上,对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性( property
)和方法(method
)。
对象的定义方式
-
直接声明一个对象
const person = { name: ['Bob', 'Smith'], age: 32, gender: 'male', interests: ['music', 'skiing'], bio: function() { alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.'); }, greeting: function() { alert('Hi! I\'m ' + this.name[0] + '.'); } };
-
采用构建函数构造对象
定义一个用于构建对象的构造函数function createNewPerson(name) { var obj = {}; obj.name = name; obj.greeting = function () { alert('Hi! I\'m ' + this.name + '.'); } return obj; }
将构造对象实例化
var person1 = new Person('Bob', 'Smith', 32, 'male', ['music', 'skiing']);
-
采用
object()
构造对象并赋予属性值和方法var person1 = new Object({ name : 'Chris', age : 38, greeting : function() { alert('Hi! I\'m ' + this.name + '.'); } });
-
采用
create()
方法,基于已有的对象创建新的对象var person2 = Object.create(person1);
对象中属性和方法的访问方式
- 点表示法
对象的名字表现为一个命名空间(namespace),它必须写在第一位——当你想访问对象内部的属性或方法时,然后是一个点(.),紧接着是你想要访问的项目,标识可以是简单属性的名字(name),或者是数组属性的一个子元素,又或者是对象的方法调用。person.age person.interests[1] person.bio()
- 括号表示法
对象的名字+方括号[]
,方括号中是用引号''
(或“”
)括起来的属性或方法。person['age'] person['name']['first']
设置对象成员
- 新成员创建
通过上述访问方式,直接给新成员赋值,即添加了新的成员。person['eyes'] = 'hazel'; person.farewell = function() { alert("Bye everybody!") };
- 读取成员
依据对象成员的访问方式,直接读取即可。console.log(person['eyes'] = 'hazel'); var byeBye() = person.farewell;
- 改变已有成员
通过上述访问方式,直接给已有成员赋值,即改变了已有成员。person.age = 45; person['name']['last'] = 'Cratchit';
- 删除已有成员
可以采用关键字delete
实现delete person.age;
本文大部分内容参考了MDN Web 文档 - JavaScript 对象基础