目录
一、对象
对象是一组无序的相关属性和方法的合集,所有的事物都是对象,例如字符串、数值、数组、函数等。
二、创建对象:(3种)
var obj={
"属性名":属性值,
...
"方法名":function(形参){函数体},
...
};
(1)希望获取到对象之中所有的东西:遍历对象:for in循环
for(var i in obj){
obj[i];
}
对象名.属性名;===对象名["属性名"]
对象名.方法名();===对象名["方法名"]()
JS中万物皆对象,除了undefined和null,一切对象的底层都是hash数组
let obj = new Object()
let str = "address"
obj[str] = "花果山" // 等价于 obj["address"] = "花果山"
obj.str = "哈哈" // 使用.的形式添加属性时,不能使用变量
(3)如果你希望在对象的方法内部使用对象自己的属性,我们需要写为this.属性名;
(3)函数中this —— 谁在调用此函数this指向就是谁
(6)自定义构造函数中出现this —— 你当前正在创建的对象
var wcz={
name:"王城主",
age:18,
hobby:"睡觉",
"zwjs":function(){return "我的名字叫"+this.name+",今年"+this.age+"岁,喜欢"+this.hobby}
};
var obj=new Object();//空对象
obj.属性名=属性值;
obj.方法名=function(){};
以上两种创建方式有一个缺点:仅仅适合创建单个对象,如果创建多个对象,代码冗余度太高
类 :
(1)类是对象模板,可以将对象中的属性和方法直接定义在类中
(2)通过一个类创建的对象,称为同类
(3)可以使用instanceof来检查一个对象是否是由某个类创建
(1)创建构造函数
function 类名(name,age,hobby,...){
this.name=name;
this.age=age;
this.salary=salary;
...
}
(2)调用自定义构造函数创建出对象
var obj=new 类名(实参,...);
例子:
//构造函数其实就是一个模板,我们根据这个模板来创建对象
function Person(name,age,hobby){
this.name=name;//tgy.name="七仙女"
this.age=age;//tgy.age=18;
this.hobby=hobby;//tgy.hobby="男"
// this.introduce=function(){return "我的名字叫"+this.name+",今年"+this.age+"岁,喜欢"+this.hobby;}
}
var qxn=new Person("七仙女",17,"女");
var swk=new Person("孙悟空",18,"男");
var dpn=new Person("大鹏鸟",19,"未知");
console.log(qxn)
console.log(swk)
console.log(dpn)
三 、可变类型
对象属于可变类型
对象创建完成后,可以任意的添加删除修改对象中的属性
注意:
(1)当对两个对象进行相等或全等比较时,比较的是对象的内存地址。每次调用都会创建一个新的对象 。
let obj2 = Object()
let obj3 = Object()
console.log(obj2 == obj3) // false
(2)如果有两个变量同时指向一个对象,
通过一个变量修改对象时,对另外一个变量也会产生影响
let obj4 = obj
obj4.name = "猪八戒" // 当修改一个对象时,所有指向该对象的变量都会收到影响
console.log("obj", obj)
console.log("obj4", obj4)
console.log(obj === obj4) //true
小结:
修改对象
修改对象时,如果有其他变量指向该对象,则所有指向该对象的变量都会受到影响
let obj = {
name: "孙悟空",
}
let obj2 = obj
obj2.name = "猪八戒" // 修改对象。两个都改变
console.log(obj2 == obj); //true
修改变量
修改变量时,只会影响当前的变量
let obj = {
name: "孙悟空",
}
let obj2 = obj
obj2 = null // 修改变量。obj不变
console.log(obj2 == obj); //false
在使用变量存储对象时,很容易因为改变变量指向的对象,提高代码的复杂度
所以通常情况下,声明存储对象的变量时会使用const
注意:
const只是禁止变量被重新赋值,对对象的修改没有任何影响
const obj3 = {
name: "猪八戒"
}
obj3.name = "沙和尚"
console.log(obj3)//沙和尚
0x33不会变,只有“孙悟空”变成“猪八戒”。