属性不是变量,不能直接使用,需配合对象使用
方法:属于对象的函数
(前菜)创建对象:
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; //删除方法
网友评论