对象

作者: 大庆无疆 | 来源:发表于2019-02-14 00:28 被阅读0次

属性不是变量,不能直接使用,需配合对象使用
方法:属于对象的函数

(前菜)创建对象:
var 对象名 = {
  属性名: 属性值,
  属性名: ['元素1', '元素2',...],//当元素值为数组时
  方法名:function () {
    函数体
  }
}
        var hero = {
            name: '亚瑟',  //名字
            age: 23,    //年龄
            equipment: ['白头盔', '黄光甲', '草鞋', '圣光剑'],  //装备
            attack: function () {  //攻击的方法
                console.log(this.name+'拿着'+this.equipment[3]+"攻击"+"史密斯");
            },
            run: function () {  //跑步的方法
                console.log(this.name+'穿着'+this.equipment[2]+'加速地奔跑');
            }
        }
访问属性(1、对象名.属性名 2、对象名['属性名']

1、hero.name
2、hero['name']

访问方法(对象名.方法名

hero.attack()

(重点)创建对象的方式

1、对象字面量(花括号{ })

利用这种方式创建,其中的成员(属性和方法)都为静态成员

var hero = {
  name: '亚瑟';  //名字
  equipment: ['白头盔', '黄光甲', '草鞋', '圣光剑'],  //装备
            attack: function () {  //攻击的方法
                console.log(this.name+'拿着'+this.equipment[3]+"攻击"+"史密斯");
            },
}

2、new Object();

Object 是一个构造函数,利用new来调用
new Object();调用构造函数,会在内存中创建一个对象

var hero = new Object();  //创建了一个空的对象并让hero来接收(就是目前还没有属性和方法)
//添加属性和方法
hero.name = '亚瑟';
hero.equipment =  ['白头盔', '黄光甲', '草鞋', '圣光剑'];  //装备
hero.attack: function () {  //攻击的方法
  console.log(this.name+'拿着'+this.equipment[3]+"攻击"+"史密斯");
}

3、工厂方法(利用函数来创建英雄工厂,因为他们都很类似)

如果我们需要创建十个英雄来对阵,利用上面的两种方法的话,我们只能逐一的创建英雄,显然这样相同的代码太多,不合适

function createHero(name, age, equipment) {  //创建英雄工厂的函数
  var hero = new Object();  //创建一个英雄对象,需要返回回去的
  //属性赋值
  hero.name = name;
  hero.age = age;
  hero.equipment = equipment;
  //方法
  hero.run = function () {
    console.log(this.name+'加速的奔跑');
  }
  return hero;//返回一个英雄对象
}

使用

var hero1 = createHero("亚瑟", 23, ['白头盔', '黄光甲', '草鞋', '圣光剑']);
console.log(hero1.name);
console.log(hero1.age);
console.log(hero1.equipment);
hero1.run();

4、自定义构造函数

自定义构造函数的声明跟普通函数差不多,所以在命名方面,构造函数的首字母都要大写,以在名字上跟普通函数区分开

与工厂方法的区别:
不用我们自己手动创建对象
不同我们手动返回创建好的对象
构造函数名称首字母必须大写
构造函数必须通过new调用

function Hero(name, age, equipment) { //声明上跟普通函数差不多,只不过函数名的首字母要大写
  //在工厂方法中我们创建了一个对象然后返回,在这里我们使用this来指定当前对象。
  //属性
  this.name = name;
  this.age = age;
  this.equipment = equipment;
  //方法
  this.run = function () {
    console.log(this.name+'在加速的奔跑');
  }
}

使用

var hero = new Hero('孙悟空', 23, ['金箍棒', '大圣袍']);
console.log(hero.name);
console.log(hero.equipment);
hero.run();

new关键字的执行过程
(1)在内存中创建一个空的对象
(2)让构造函数中的this指向刚刚创建的对象
(3)执行构造函数,在构造函数中设置属性和方法(当然也可以做其他事)
(4)返回当前对象(所以我们不用在构造函数中使用return)


如何遍历和删除属性方法?

遍历
使用for in语句可以遍历所有的属性和方法(要配合访问属性的第二种方式:对象名['属性名']

删除
使用delete关键字
delete 对象名.属性名(方法名)

var dx = {
  name:'李白',  //属性
  move: function () {  //方法
      console.log(this.name + '移动了一步');
  }
}

//遍历成员
for(var key in dx) {  key表示属性名和方法名对应的字符串
  console.log(key+'='+dx[key]);   利用访问属性的第二种方法:对象名['属性名'];
}

//删除成员
delete dx.name;  //删除属性
delete dx.move;  //删除方法

相关文章

网友评论

      本文标题:对象

      本文链接:https://www.haomeiwen.com/subject/wgajeqtx.html