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);

為什么會出現這樣的結果呢?

因為這里返回一個已經定義好的對象,每次返回的都是同一個內存地址,所以只要其中提個對象屬性被改變,通過該方法返回對象的屬性都會改變

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM