-
JavaScript对象就是一组属性和方法(函数)的集合。
-
创建对象
-
字面量表示法:
一个对象也需要用一个变量来存储,然后通过点(.)来访问该对象的属性和方法。- 语法:
var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value }
对象成员的值可以是任意的。比如现在创建一个
person
对象:var 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] + '.'); } };
在
person
对象里有字符串(string),数字(number),两个数组(array),两个函数(function)。前4个成员是资料项目,被称为对象的属性(property),后两个成员是函数,允许对象对资料做一些操作,被称为对象的方法(method)。这样一个
person
对象被称之为对象的字面量
(literal)——手动的写出对象的内容来创建一个对象。 -
使用
new
关键字
var o = new Object(); // 创建一个空对象,效果等同{}. var d = new Date(); // 创建一个表示当前时间的对象 var r = new RegExp("js"); // 创建一个正则表达式对象 varperson = new Object(); person.name = "狼狼的蓝胖子"; person.age = 25;
或:
function Person(name, age) { this.name = name; this.age = age; this.show=function(){} } var person = new Person("Jack",15);
-
-
访问对象成员(属性或方法)
- 点表示法
可以用点表示法(dot notation)来访问对象的属性和方法。
对象的名字表现为一个命名空间(namespace),它必须写在第一位——当你想访问对象内部的属性或方法时,然后是一个点(.),紧接着是你想要访问的项目,标识可以是简单属性的名字(name),或者是数组属性的一个子元素,又或者是对象的方法调用。如下所示访问
person
对象:person.name[0] // 'Bob' person.age // 32 person.interests[1] // 'skiing' person.bio() // Bob Smith is 32 years old. He likes music and skiing. person.greeting() // Hi! I'm Bob.
- 子命名空间
可以用一个对象来做另一个对象成员的值,如将name:
name : { first : 'Bob', last : 'Smith' },
这就是创建了一个子命名空间。再要访问到Bobs属性时,只需要链式的再使用一次点表示法:
person.name.first // 'Bob'
- 括号表示法
还可以使用括号法访问对象属性。如:
person['age'] // 32 person['name']['first'] // 'Bob'
看起来很像访问一个数组元素。对象做了字符串到值的映射,而数组做的是数字到值的映射。所以对象有时被称之为关联数组。
- 点表示法
-
设置对象成员
- 更改已存在的属性(或方法)
person.age = 45 person['name']['last'] = 'Cratchit' person.age // 45 person['name']['last'] // 'Cratchit'
- 创建新的属性(或方法(
person['eyes'] = 'hazel' person.farewell = function() { alert("Bye everybody!") } person['eyes'] // 'hazel' person.farewell() // Bye everybody!
括号表示法一个有用的地方是它不仅可以动态的去设置对象成员的值,还可以动态的去设置成员的名字。
- 删除属性(或方法)
delete person.eyes;
- 判断有无属性
in
'name' in person; // true
-
this
在person
对象的greeting
方法中使用了this
greeting: function() {
alert('Hi! I\'m ' + this.name[0] + '.');
}
关键字this
指向了当前代码运行时的对象( 原文:the current object the code is being written inside )——这里即指person
对象,保证了当代码的上下文(context)改变时变量的值的正确性(比如:不同的person
对象拥有不同的name
这个属性,很明显greeting
这个方法需要使用的是它们自己的name
)。
var person1 = {
name : 'Chris',
greeting: function() {
alert('Hi! I\'m ' + this.name + '.');
}
}
var person2 = {
name : 'Brian',
greeting: function() {
alert('Hi! I\'m ' + this.name + '.');
}
}
person1.greeting() // Hi! I'm Chris.
person2.greeting() // Hi! I'm Brain.
JavaScript对象基础(https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics)
JavaScript对象基础讲解(http://www.codexiu.cn/javascript/blog/40328/)
JavaScript 对象基础(http://wanwu.tech/2017/06/03/object-basics/)
网友评论