21-对象
对象是一组无序的相关属性和方法的集合,所有的事物都是对象,万物皆对象
一、创建对象的三种方式
对象的属性以键值对存在。
对象的方法是一个函数
1.利用对象字面量创建对象
var obj = {
name : '小艾同学',
age : 23,
sex : '女',
flag : function(){
alert('冲冲冲!~');
}
};
2.通过object创建函数
var obj = new Object();
obj.name = '小艾同学';
obj.age = 23;
obj.sex : '女';
3.构造函数创建对象
-
构造函数约定首字母大写。
-
函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
-
构造函数中不需要 return 返回结果。
-
当我们创建对象的时候,必须用 new 来调用构造函数。
function 构造函数名(形参1,形参2,形参3) {
this.属性名1 = 参数1;
this.属性名2 = 参数2;
this.属性名3 = 参数3;
this.方法名 = 函数体;
}
//调用
var obj = new 构造函数名(实参1,实参2,实参3)
<script>
function Person(uName, uSex, uScore) {
this.name = uName;
this.sex = uSex;
this.score = uScore;
this.do = function (x) {
console.log(x);
}
}
let my = new Person('小艾', '女', '100');
let he = new Person('小柴', '男', '1000');
console.log(my);
console.log(he);
my.do('敲代码')
he.do('教我敲代码')
console.log(my.name);
console.log(he.name);
</script>
new
- 在构造函数代码开始执行之前,创建一个空对象;(new和构造函数生了个孩子)
- 修改this的指向,把this指向创建出来的空对象;(this指向生的孩子)
- 给空对象添加属性和方法;(给孩子传递知识供他成长)
- 在函数完成之后,返回this---即创建出来的对象(孩子长大了,就回报父母)
二、对象中的增删改查
- 增
- 对象名.属性名 = 值
- 属性名要是一个原对象里没有的属性
- 删
- delete 对象.属性名
- 改
- 对象名.属性名 = 新值
- 查
- 对象名.属性名
- 上述方法中,能用点语法的就能用中括号语法
- .语法不能解析变量
- []可以
- 对象名['属性名'] = 属性值;
- 属性名一定要加引号,不然会被当成变量去解析
var obj = {
name: '小艾同学',
age: 23,
sex: '女'
};
var sex = 'age';
console.log(obj.sex); // 女 => 不会解析变量 直接去找 sex这个属性
console.log(obj['sex']); // 女 => 不会解析变量 直接去找 sex这个属性
console.log(obj[sex]); // 23 => 会将sex当做变量去解析 会获取sex里面的age
三、遍历对象
<script>
function My(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var a = new My('小艾同学', 23, '女');
for (var k in a) {
console.log(k, a[k]);
console.log(`键名:${k},键值:${a[k]}`)
}
</script>
四、复杂类型的复制操作
复制的是地址值,一变都变
function Person(name, age) {
this.name = name;
this.age = age;
}
// 通过new得到的对象都是一个新对象
var p1 = new Person('zs', 18);
var p2 = new Person('zs', 18);
p1.name = 'ls';
console.log(p2.name); // zs
p2 = p1;
console.log(p2.name); // ls
function Person(name, age) {
this.name = name;
this.age = age;
}
function f1(p) {
p.name = 'ls';
console.log(p.name); // ls
}
var p1 = new Person('zs', 18);
console.log(p1.name); // zs
f1(p1);
console.log(p1.name); // ls