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