1.对象的相关概念
对象是一个具体的事,具有特征和行为,是一个抽象的概念,同时对象也是一组没有顺序的值。
JavaScript对象有三种:自定义对象,内置对象,浏览器对象,其中自定义对象和内置对象都是ECMAScript。
特征:属性,属性可以是基本值,函数,也可以是一个对象,属性类似键值对的方式存储。
行为:方法,函数 行为名称:function() {}
属性和方法的调用:对象名.属性名/方法名或者使用类似数组的方式:对象名[属性名],在函数内部调用属性使用this.属性名。
方法和函数的区别:方法就是对象内部定义的函数,其本质上还是一样的。
2.对象的创建方式
对象字面量:var 对象名 = {属性名:属性值,方法名:function() {}} 字面量就是一个固定的表达方式。
注意:属性和方法使用逗号隔开,不是使用分号隔开。
new Object()创建对象,对象名.属性名或者对象名.方法名设置该对象的属性和方法。
使用对象字面量和new Object()创建对象适用于创建少量的对象,如果要创建多个对象,不推荐使用。
//使用对象字面量创建对象
var person = {
name:'张三',
age:18,
sex:'男',
sayName:function() {
console.log('我的名字叫做 '+this.name);
}
}
//调用方法
person.sayName();
console.log(person.age); //调用属性
// new Object() 创建构造函数
var dog = new Object();
dog.name = 'er ha';
dog.age = 100;
dog.sayWang = function() {
console.log("旺旺");
}
工厂函数创建对象:function 函数名(对象的属性) {var 对象名 = new Object();属性 方法}
//工厂函数创建对象
function createPerson(name,age,sex) {
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.sayHi = function() {
console.log('Hello World!');
}
return person; //注意:要将创建的对象返回
}
//可以创建多个变量,减少代码量
var p1 = createPerson('zs',20,'男');
console.log(p1);
var p2 = createPerson('ls',25,'男');
console.log(p2);
//p1,p2打印都是Object类型,无法确定具体的对象类型
使用工厂函数虽然可以创建多个对象,但是无法确定对象的具体类型。
构造函数创建对象:function 构造函数名(对象的属性) {this.属性名 = 属性名,this.方法名 = function() {}}
var 对象名 = new 构造函数();
构造函数名首字母一般大写,区别普通的函数
function Student(number,name,score) {
this.number = number;
this.name = name;
this.score = score;
this.printScore = function() {
console.log(this.score);
}
}
var stu1 = new Student();
console.log(stu1); // Student类型
stu1.printScore();
如果只是创建一个对象,推荐使用对象字面量创建,如果需要创建多个对象,并且具有相同的属性和方法,那么推荐使用构造函数创建对象。
3.new 关键字
执行过程:
1).创建一个空对象,
2).使用this指向当前的属性和方法,
3).执行构造函数,
4).默认返回创建的对象。
4.this关键字
this出现的位置和所代表的意义
1).函数内: this指向window,
2).方法中: this是指向这个方法所属的对象,
3).构造函数: this就是构造函数创建的对象。
5.遍历对象成员和删除对象成员
遍历对象的成员:打印对象的属性除了可以使用对象名.属性名之外,还可以使用for in 遍历对象,类似数组的方式对象名[属性名]来获取相应的属性。
删除对象成员:使用关键字delete 对象名.属性名/方法名()
//创建一个测试对象
var obj = {
name:'张三',
age:'82',
sex:'男',
sayName:function() {
alert('Hi,my name is '+this.name);
}
};
for(var key in obj) {
console.log(obj[key]);
}
//删除对象成员
delete obj.name;
delete obj.sayName();
console.log(obj.sayName()); //undefined