zoukankan      html  css  js  c++  java
  • js通过方法返回对象的注意点

    问题:js通过方法返回一个字面量对象和返回一个提前已经定义好的字面量对象有区别吗?

    答案:有

    我们先来看看第一种情况,fun1方法返回一个提前没定义的字面量对象,然后通过调用方法返回三个对象,分别是obj1, obj2, obj3,然后我修改obj2对象的age方法,打印obj1, obj2, obj3,的age属性分别是什么?

     1 //第一种情况:
     2         function fun1() {
     3 
     4             return {
     5                 uname: `ash`,
     6                 age: 18
     7             }
     8             //这里返回一个字面量对象,
     9             //每次返回的不是同一对象地址,所以改变obj2的age属性,obj1,obj3,age属性是不会有影响的
    10         }
    11         obj1 = fun1();
    12         obj2 = fun1();
    13         obj3 = fun1();
    14         obj2.age = 16;
    15         console.log(obj1.age);
    16         console.log(obj2.age);
    17         console.log(obj3.age);

    打印结果 :

    obj1.age = 18   

    obj2.age = 16  

     obj3.age = 18

    为什么户出现这样的结果呢?因为fun1每次返回的不是同一对象地址,所以改变obj2的age属性,obj1,obj3,age属性是不会有影响

    再看第二种情况,我先定义好obj3,通过fun2()方法返回这个对象,现在我调用fun2方法,返回obj21  obj22 obj23 对象,修改obj22对象的age属性为16,分别打印obj21  obj22 obj23  对象的age属性

    结果:
    obj21.age = 18 
    obj21.age = 16 
    obj21.age = 18
     1 //第二种情况:
     2         var obj3 = {
     3             uname: `ash`,
     4             age: 18
     5         };
     6 
     7         function fun2() {
     8             return obj2;
     9         }
    10         obj21 = fun2();
    11         obj22 = fun2();
    12         obj23 = fun2();
    13         obj2.age = 16;
    14         console.log(obj21.age);
    15         console.log(obj22.age);
    16         console.log(obj23.age);

    为什么会出现这样的结果呢?

    因为这里返回一个已经定义好的对象,每次返回的都是同一个内存地址,所以只要其中提个对象属性被改变,通过该方法返回对象的属性都会改变

     
  • 相关阅读:
    mysql将一个表的数据 重复复制多份到表中
    PHP中将指定文本内容导入到word中
    系统安全-SElinux
    通过身份证号码提取年龄,性别
    MySQL-获取某天的数据
    mysql-介绍、MySQL部署、数据类型、存储引擎
    监控系统-ELK
    监控系统-Grafana
    监控系统-zabbix
    监控系统-openfalcon
  • 原文地址:https://www.cnblogs.com/chq1234/p/11693031.html
Copyright © 2011-2022 走看看