找回密碼
 立即註冊
查看: 1821|回復: 10

JS : Object

[複製鏈接]

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

發表於 2022-11-29 18:49:17 | 顯示全部樓層 |閱讀模式
  1. let spaceship = {
  2.   'Fuel Type' : 'Turbo Fuel',
  3.   homePlanet : 'Earth',
  4.   color : 'silver',
  5.   'Secret Mission' : 'Discover life outside of Earth.'
  6. };

  7. spaceship.color = 'glorious gold';
  8. spaceship.numEngines = 7;
  9. delete spaceship['Secret Mission'];
複製代碼
Object 基本用法。
[發帖際遇]: 一個袋子砸在了 admin 頭上,admin 賺了 2 金錢. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-11-29 19:12:51 | 顯示全部樓層
  1. let retreatMessage = 'We no longer wish to conquer your planet. It is full of dogs, which we do not care for.';

  2. let alienShip = {
  3.   retreat() {
  4.     console.log(retreatMessage);
  5.   },
  6.   takeOff() {
  7.     console.log('Spim... Borp... Glix... Blastoff!');
  8.   }
  9. };
  10. alienShip.retreat();
  11. alienShip.takeOff();
複製代碼
When the data stored on an object is a function we call that a method. A property is what an object has, while a method is what an object does.
[發帖際遇]: admin 發帖時在路邊撿到 2 金錢,偷偷放進了口袋. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-11-30 15:29:24 | 顯示全部樓層
  1. let spaceship = {
  2.   'Fuel Type' : 'Turbo Fuel',
  3.   homePlanet : 'Earth'
  4. };

  5. let greenEnergy = obj => {
  6.   obj['Fuel Type'] = 'avocado oil';
  7. };

  8. let remotelyDisable = obj => {
  9.   obj.disabled = true;
  10. };

  11. greenEnergy(spaceship);
  12. remotelyDisable(spaceship);

  13. console.log(spaceship);
複製代碼
Pass a variable assigned to an object into a function as an argument.
[發帖際遇]: 一個袋子砸在了 admin 頭上,admin 賺了 1 金錢. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-11-30 15:35:40 | 顯示全部樓層
  1. let spaceship = {
  2.     crew: {
  3.     captain: {
  4.         name: 'Lily',
  5.         degree: 'Computer Engineering',
  6.         cheerTeam() { console.log('You got this!') }
  7.         },
  8.     'chief officer': {
  9.         name: 'Dan',
  10.         degree: 'Aerospace Engineering',
  11.         agree() { console.log('I agree, captain!') }
  12.         },
  13.     medic: {
  14.         name: 'Clementine',
  15.         degree: 'Physics',
  16.         announce() { console.log(`Jets on!`) } },
  17.     translator: {
  18.         name: 'Shauna',
  19.         degree: 'Conservation Science',
  20.         powerFuel() { console.log('The tank is full!') }
  21.         }
  22.     }
  23. };

  24. for (let crewMember in spaceship.crew) {
  25.   console.log(`${crewMember}: ${spaceship.crew[crewMember].name}`);
  26. }

  27. for (let crewMember in spaceship.crew) {
  28.   console.log(`${spaceship.crew[crewMember].name}: ${spaceship.crew[crewMember].degree}`);
  29. }
複製代碼
Looping Through Objects
[發帖際遇]: 一個袋子砸在了 admin 頭上,admin 賺了 3 金錢. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-11-30 17:43:13 | 顯示全部樓層
  1. const robot = {
  2.   model : '1E78V2',
  3.   energyLevel : 100,
  4.   provideInfo(){
  5.     return `I am ${this.model} and my current energy level is ${this.energyLevel}.`
  6.   }
  7. };
  8. console.log(robot.provideInfo());
複製代碼
this 的使用。
[發帖際遇]: 一個袋子砸在了 admin 頭上,admin 賺了 1 金錢. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-11-30 18:17:56 | 顯示全部樓層
  1. const robot = {
  2.   _model: '1E78V2',
  3.   _energyLevel: 100,
  4.   get energyLevel() {
  5.     if (typeof(this._energyLevel) == 'number'){
  6.       return `My current energy level is ${this._energyLevel}`;
  7.     } else {
  8.       return 'System malfunction: cannot retrieve energy level';
  9.     }
  10.   }
  11. };

  12. console.log(robot.energyLevel);
複製代碼
Getters 的用法,最後的呼叫 robot.energyLevel 不用再加上小括弧 ( )。
[發帖際遇]: admin 樂于助人,獎勵 2 貢獻. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-12-2 18:34:55 | 顯示全部樓層
  1. const robot = {
  2.   _model: '1E78V2',
  3.   _energyLevel: 100,
  4.   _numOfSensors: 15,
  5.   get numOfSensors(){
  6.     if(typeof this._numOfSensors === 'number'){
  7.       return this._numOfSensors;
  8.     } else {
  9.       return 'Sensors are currently down.'
  10.     }
  11.   },
  12.   set numOfSensors(num){
  13.     if (typeof num === 'number' && num >= 0) {
  14.       this._numOfSensors = num;
  15.     } else {
  16.       console.log('Pass in a number that is greater than or equal to 0');
  17.     }
  18.   }
  19. };

  20. robot.numOfSensors = 100;
  21. console.log(robot.numOfSensors);
複製代碼
Along with getter methods, we can also create setter methods which reassign values of existing properties within an object.
[發帖際遇]: admin 發帖時在路邊撿到 5 金錢,偷偷放進了口袋. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-12-2 18:50:28 | 顯示全部樓層
  1. const robotFactory = (model, mobile) => {
  2.   return {
  3.     model : model,
  4.     mobile : mobile,
  5.     beep(){
  6.       console.log('Beep Boop');
  7.     }
  8.   }
  9. }

  10. const tinCan = robotFactory('P-500', true);
  11. tinCan.beep();
複製代碼
Factory Functions
[發帖際遇]: admin 樂于助人,獎勵 1 貢獻. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-12-2 18:53:31 | 顯示全部樓層
  1. function robotFactory(model, mobile){
  2.   return {
  3.     model,
  4.     mobile,
  5.     beep() {
  6.       console.log('Beep Boop');
  7.     }
  8.   }
  9. }

  10. // To check that the property value shorthand technique worked:
  11. const newRobot = robotFactory('P-501', false)
  12. console.log(newRobot.model)
  13. console.log(newRobot.mobile)
複製代碼
Property Value Shorthand
[發帖際遇]: admin 樂于助人,獎勵 7 貢獻. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-12-2 18:58:05 | 顯示全部樓層
  1. const robot = {
  2.   model: '1E78V2',
  3.   energyLevel: 100,
  4.   functionality: {
  5.     beep() {
  6.       console.log('Beep Boop');
  7.     },
  8.     fireLaser() {
  9.       console.log('Pew Pew');
  10.     },
  11.   }
  12. };

  13. const { functionality } = robot;
  14. functionality.beep();
複製代碼
const { functionality } = robot;

const functionality = robot.functionality;
是一樣的。
[發帖際遇]: admin 樂于助人,獎勵 5 貢獻. 幸運榜 / 衰神榜

920

主題

629

回帖

3萬

積分

管理員

論壇管理員

積分
37702

最佳新人活躍會員熱心會員推廣達人宣傳達人灌水之王突出貢獻優秀版主榮譽管理論壇元老

 樓主| 發表於 2022-12-2 19:09:49 | 顯示全部樓層
  1. const robot = {
  2.         model: 'SAL-1000',
  3.   mobile: true,
  4.   sentient: false,
  5.   armor: 'Steel-plated',
  6.   energyLevel: 75
  7. };

  8. const robotKeys = Object.keys(robot);
  9. console.log(robotKeys);

  10. const robotEntries = Object.entries(robot);
  11. console.log(robotEntries);

  12. const newRobot = Object.assign({laserBlaster: true, voiceRecognition: true}, robot);
  13. console.log(newRobot);
複製代碼
Built-in Object Methods
[發帖際遇]: 一個袋子砸在了 admin 頭上,admin 賺了 3 金錢. 幸運榜 / 衰神榜
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|DD論壇 維護: Redd Design

GMT+8, 2024-5-6 01:20 , Processed in 0.041010 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表