JavaScript面向对象编程指南 读书笔记4-01
从数组到对象
var hero = { bread:'Turtle',
occupation:'Ninja'
}; -
hero用于表示该对象的变量名
-
与定义数组时使用中括号[]不同,对象使用的是{}
-
括号中用逗号分割的是组成对象的元素(通常称之为属性)
-
键值对之间用冒号分割,如:key:value
术语名词:用[]定义数组方法称之为数组文本标识法,用{}定义对象的方法称之为对象文本标识法
元素、属性、方法与成员
说到数组的时候,我们通常说其中包含的是元素,而对于对象,我们通常会说其中包含的是属性。
对象的属性可以是函数,因为函数本身就是一种数据,这种情况下,我们称该属性为方法。
哈希表、关联型数组
在一般的程序设计语言中,通常都会存在两种不同的数组形式
-
一般性数组,也交索引型数组或者枚举型数组(通常以数字为键名)
-
关联型数组,也叫哈希表或者字典(通常以字符串为键值)
在JavaScript中,我们会用数组来表示索引型数组,对象来表示关联型数组。
访问对象属性
通常可以通过以下两种方式来访问对象的属性
-
中括表示法,如:hero['occupation']
-
点号表示法,如:hero.occupation
如果所访问的属性不符合变量命名规则,不能通过点号来访问;
如果要访问的属性名是不确定的,必须使用中括号表示法;
调用对象方法
由于对象方法实际上是一个函数类型的属性,因此访问方式完全与属性相同,用点号跟中括号表示法都可以。
修改属性与方法
由于JavaScript是一种动态语言,所以它允许我们随时对现存对象的属性和方法进行修改。
//创建一个空对象
var hero = {};
//为对象添加属性和方法
hero.breed = 'turtle';
hero.name = 'Leonardo';
hero.sayName = function() {
return hero.name;
}
//调用该方法
hero.sayName();
//删除属性
delete hero.name;
//再调用该方法
hero.sayName();
使用this值
当我们处于某个对象的方法内部时,可以使用this来访问同一对象的属性。当我们引用this值时,实际上引用的就是“这个对象”或者“当前对象”,如:
var hero = {
name: 'Rafaelo',
sayName:function(){
return this.name;
}
}
构造器函数
我们还可以通过构造器函数的方式来创建对象。如:
function Hero(){
this.occupation = 'Ninja';
}
var hero = new Hero();
hero.occupation; function Hero(name){
this.name = name;
this.occupation = 'Ninja';
this.whoAreYou = function(){
return "I'm "+
this.name +
" and I'm a "+
this.occupation;
}
}
var h1 = new Hero('Michelangelo');
var h2 = new Hero('Donatello');
h1.whoAreYou();
h2.whoAreYou();