什么是对象?
JavaScript 中几乎所有的事物都是对象,例如字符串、数字、日期、数组、函数等都可以是一个对象。每个对象都拥有它的属性和方法。
对象的属性
属性是与对象相关的值,能够反映该对象某些特定的性质。
举个例子,例如可以字符串中就有一个属性 length,可以获取字符串的长度:
var msg = "你好,侠课岛";
console.log(msg.length); // 输出:6
或者是数组中也有这个 length 属性,获取数组的长度:
var arr = [1, 4, 7, 9, 22, 34];
console.log(arr.length); // 输出: 6
对象的方法
对的方法是能够在对象上执行的动作,例如字符串中有很多常用方法,之前我们也学过的,像是连接字符串呀,将字符串转为大小写呀,分割字符串呀。
例如使用 concat
方法连接两个字符串:
var msg1 = "你好";
var msg2 = "侠课岛";
console.log(msg1.concat(msg2)); // 输出:你好侠课岛
创建对象
在 JavaScript 中,我们还可以自己创建对象。
通过object方式创建对象
首先通过 Object
构造器 new
一个对象,然后再向对象中添加成员:
var obj = new Object();
示例:
我们创建一个名为 person 的对象,在这个对象中添加属性 name
、address
和方法 show
:
var person = new Object();
person.name = "侠课岛";
person.address = "长沙";
person.show = function(){
console.log("对象的方法");
}
通过字面量创建对象
字面量其实之前我们讲到过,表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量。
我们可以将成员的信息写到 {}
中,赋值给一个变量,此时这个变量就是一个对象。
示例:
var person = {
name: "侠课岛",
address:"长沙",
show:function(){
console.log("对象的方法");
}
}
console.log(person.name); // 输出:侠课岛
console.log(person.address); // 输出:长沙
使用这种方式创建对象,要注意给属性赋值时,使用的是冒号:
而不是等号,属性之间用逗号分隔,而不是用分号。
使用构造函数创建对象
构造函数和普通函数差不多,但是在定义构造函数名我们一般会将函数名首字母大写。我们在创建对象时,会自动执行构造函数。
示例:
例如我们定义一个构造函数Person
,然后实例化Person
,构造函数会自动执行,不需要调用:
function Person(){
this.name = "侠课岛";
this.address = "长沙";
this.show = function(){
console.log("对象方法");
}
console.log("创建对象时构造函数会自动执行");
}
// 创建对象
var p = new Person(); // 输出:创建对象时构造函数会自动执行
循环变量对象的属性
我们可以使用 for...in
来循环变量对象的属性。
示例:
例如我们遍历对象person中的属性,如下所示:
var person = new Object();
person.id = 1;
person.name = "侠课岛";
person.age = 18;
person.address = "长沙";
for (item in person){
console.log(item + "=" + person[item]);
}
输出:
id=1
name=侠课岛
age=18
address=长沙
向已有对象添加属性和方法
我们可以向已经存在的对象,添加新的属性和方法。
示例:
例如 person
对象已经存在,我们为这个对象添加一个属性 age,和一个方法hobby()
:
var person = new Object();
person.name = "侠课岛";
person.address = "长沙";
person.show = function(){
console.log("对象的方法");
}
person.age = 18;
person.hobby = function(){
console.log("我喜欢学习");
}
person.hobby(); // 输出:我喜欢学习
JavaScript不使用类
JavaScript虽然是面向对象的语言,但是JavaScript 中不使用类,也不会创建类。JavaScript 是基于 prototype,而不是基于类的。