这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战
对象的概念
JavaScript 的对象是无序属性的集合, 其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把 JavaScript 中的对象想象成键值对,其中值可以是数据和函数。
对象的行为和特征:
- 特征—在对象中用属性表示
- 行为—在对象中用方法表示
对象的创建方法
1. 对象字面量创建对象
对象字面量语法:{}
内部可以存放多条数据,数据与数据之间用逗号分隔,最后一个后面不要加逗号。
每条数据都是有属性名和属性值组成,键值对写法:k: v
- k: 属性名
- v:属性值,可以是任意类型的数据,比如简单类型数据、函数、对象
//通过对象字面量创建一个对象
var obj = {
name: "lucy",
age: 18,
sex: "female",
sayHi: function () {
console.log("hello");
}
};
复制代码
- 属性:对象的描述性特征,一般是名词,相当于定义在对象内部的变量
- 方法:对象的行为和功能,一般是动词,定义在对象中的函数
对象的调用/更改/添加/删除
-
用对象的变量名打点调用某个属性名,得到属性值。
-
在对象内部用 this 打点调用属性名。this 替代对象。
-
用对象的变量名后面加 [] 调用,[] 内部是字符串格式的属性名。
-
调用方法时,需要在方法名后加 () 执行。
<script>
var obj = {
name: "lucy",
age: 18,
sex: "female",
sayHi: function () {
console.log(this.name+" say hello!");
}
}
console.log(obj.name);
console.log(obj.age);
obj.sayHi();
//中括号调用方法
console.log(obj["name"]);
obj["sayHi"]();
</script>
复制代码

//更改
obj.age=20;
console.log(obj);
//添加
obj.weight = 120;
console.log(obj);
//删除
delete obj.sex;
console.log(obj);
复制代码

2. new Object() 创建对象
Object() 构造函数,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与 new 运算符一起使用在创建对象的语句中。
-
构造函数用于创建一类对象,首字母要大写。
-
构造函数要和 new 一起使用才有意义
<script>
//new Object()创建对象
var person = new Object(); //创建了一个新的空对象
person.name="lucy";
person.age=18;
person.sex=true;
person.sayHi = function(){
console.log("hello");
}
console.log(person);
</script>
复制代码

new 在执行时会做四件事情
• new 会在内存中创建一个新的空对象
• new 会让 this 指向这个新的对象
• 执行构造函数 (目的:给这个新对象加属性和方法)
• new 会返回这个新对象
3. 工厂函数创建对象
如果要创建多个类似的对象,可以将 new Object() 过程封装到一个函数中,将来调用函数就能创建一个对象,相当于一个生产对象的函数工厂,用来简化代码。
<script>
//工厂方法相当于对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");
}
//将对象作为函数的返回值
return person;
}
var p1 = createperson("lucy",18,"female");
var p2 = createperson("mary",25,"female");
console.log(p1,p2);
</script>
复制代码

4. 自定义构造函数
比工厂方法更加简单。
自定义一个创建具体对象的构造函数,函数内部不需要 new 一个构造函数的过程,直接使用 this 代替对象进行属性和方法的书写,也不需要 return 一个返回值。
使用时,利用 new 关键字调用自定义的构造函数即可。
注意:构造函数的函数名首字母需要大写,区别于其他普通函数名。
<script>
//定义一个构造函数,首字母必须大写
function Person(name,age,sex){
//不需要使用new创建一个新对象
//用this替代将来创建的新对象
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function(){
console.log("hello");
}
//不需要return, 因为通过new实现了
}
//用new关键字调用构造函数
var p1 = new Person("lucy",18,"female");
console.log(p1);
</script>
复制代码

对象遍历
for in 循环也是循环的一种,专门用来遍历对象,内部会定义一个 k 变量, k 变量在每次循环时会从第一个开始接收属性名,一直接收到最后一条属性名,执行完后跳出循环。
<script>
//定义一个构造函数,首字母必须大写
function Person(name,age,sex){
//不需要使用new创建一个新对象
//用this替代将来创建的新对象
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function(){
console.log("hello");
}
//不需要return, 因为通过new实现了
}
//用new关键字调用构造函数
var p1 = new Person("lucy",18,"female");
console.log(p1);
//遍历
for(var k in p1){
console.log(k+"项的属性值是:"+p1[k])
}
</script>
复制代码






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)