三、对象

目录

一、对象

二、创建对象:(3种)

三 、可变类型


一、对象

对象是一组无序的相关属性和方法的合集,所有的事物都是对象,例如字符串、数值、数组、函数等。

对象是由属性(属性名+属性值)和方法组成的。

属性:事物的特征,在对象中用属性来表示(常用名词)

方法:事物的行为,在对象中用方法来表示(常用动词)

二、创建对象:(3种)

1、直接量方式:

var obj={

"属性名":属性值,

...

"方法名":function(形参){函数体},

...

};

(1)希望获取到对象之中所有的东西:遍历对象:for in循环

for(var i in obj){

obj[i];

}

(2)如何访问对象的属性和方法 

       对象名.属性名;===对象名["属性名"]

       对象名.方法名();===对象名["方法名"]()

JS中万物皆对象,除了undefined和null,一切对象的底层都是hash数组

特殊:(1)访问到不存在的属性,返回undefined

           (2)随时随地可以添加不存在的属性和方法

    let obj = new Object()  
    let str = "address"

    obj[str] = "花果山" // 等价于 obj["address"] = "花果山"

    obj.str = "哈哈" // 使用.的形式添加属性时,不能使用变量

           (3)如果你希望在对象的方法内部使用对象自己的属性,我们需要写为this.属性名;

this指向:

        (1)单个元素绑定事件this —— 这个元素

       (2)多个元素绑定事件this —— 当前元素

       (3)函数中this —— 谁在调用此函数this指向就是谁

       (4)定时器中this —— window

       (5)箭头函数this —— 外部对象

       (6)自定义构造函数中出现this —— 你当前正在创建的对象

            var wcz={

                name:"王城主",

                age:18,

                hobby:"睡觉",

                "zwjs":function(){return "我的名字叫"+this.name+",今年"+this.age+"岁,喜欢"+this.hobby}

            };

2.预定义构造函数方式:垃圾

var obj=new Object();//空对象

obj.属性名=属性值;

obj.方法名=function(){};

以上两种创建方式有一个缺点:仅仅适合创建单个对象,如果创建多个对象,代码冗余度太高

3.专门为创建多个对象准备的

自定义构造函数方式:2步

类 :

                (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不会变,只有“孙悟空”变成“猪八戒”。

           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值