JavaScript中几乎一切都是对象:创建对象的三种方式【云图智联】

免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/

Javascript中的一切几乎都是对象,无论是数组还是函数。本文将教你使用JavaScript创建对象的三种方法。

对象字面量

JavaScript对象字面量是指用大括号括起来的用逗号分隔的名称——值对列表。对象字面量用于封装代码并将其包装在有序的包中。

  1. let Person = { 
  2.   name: "Foziya", 
  3.   age: 20, 
  4.   action: ["walk", " run"], 
  5.   greeting: function() { 
  6.     console.log("Hello"); 
  7.   } 
  8. }; 

对象字面量的属性值可以是任何数据类型,包括数组字面量、函数字面量和嵌套对象字面量。

  1. let shape = { 
  2.   name: "rectangle", 
  3.   color: "red", 
  4.   size: { 
  5.     length: 10, 
  6.     breadth: 20 
  7.   } 
  8. }; 
  9.   
  10. console.log(shape); 
  11.  // { name:'rectangle', 
  12.  // color: 'red', 
  13.  // size: { length:10, breadth: 20 } } 
  14.   
  15. console.log(shape.size.length) 
  16. // 10 

简写属性名称

假设必须将不同的变量放在一个对象内,有一种方法是:

  1. let one = 1; 
  2. let two = 2; 
  3. let three = 3; 
  4.   
  5. let numbers = { 
  6.   one: one, 
  7.   two: two, 
  8.   three: three 
  9. }; 
  10. console.log(numbers); 
  11.   
  12. //{ one: 1, two: 2, three: 3 } 

使用ECMAScript 2015,可通过较短的表示法实现相同的目的:

  1. let one = 1; 
  2. let two = 2; 
  3. let three = 3; 
  4.   
  5. let numbers = { one, two, three }; 
  6.   
  7. console.log(numbers); 
  8. //{ one: 1, two: 2, three: 3 } 
  9.   
  10. console.log(numbers.one) 
  11. // 1 
  12.   
  13. console.log(numbers.one === { one }.one); 
  14. // true 

用户定义的构造函数

你也可以使用函数在JavaScript中创建对象。仔细想,其实它们本身已经是对象了,因此对象用于创建更多对象。

通常,此方法优于对象构造函数。试想必须创建数百个具有相同属性的对象,使用对象构造函数方法,必须手动将所有属性添加到所有对象,但是使用构造函数可以预定义这些属性。

  1. functionmovies(name, releaseYear, genre, ratings) { 
  2.   this.name = name; 
  3.   this.releaseYear =releaseYear; 
  4.   this.genre = genre; 
  5.   this.ratings =ratings; 
  6.   this.watch = () => { 
  7.     console.log("WatchOnline"); 
  8.   }; 
  9.   
  10. let DPS = new movies("Dead Poets Society", 1989, ["Drama", "Teen"], { 
  11.   IMDb: "8.1 /10", 
  12.   Metacritic: "79%" 
  13. }); 
  14.   
  15. console.log(DPS);movies { 
  16. //     name: 'Dead Poets Society', 
  17. //         releaseYear: 1989, 
  18. //             genre: ['Drama','Teen'], 
  19. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '79%' }, 
  20. //     watch: [Function] 
  21. // } 
  22.   
  23.   
  24. let rocky = new movies("Rocky", 1976, ["Drama", "Sports"], { 
  25.   IMDb: "8.1 /10", 
  26.   Metacritic: "70%" 
  27. }); 
  28.   
  29. console.log(rocky); 
  30.   
  31. // movies { 
  32. //     name: 'Rocky', 
  33. //         releaseYear: 1976, 
  34. //             genre: ['Drama','Sports'], 
  35. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '70%' }, 
  36. //     watch: [Function] 
  37. // } 

使用相同的构造函数,可以创建任意数量的对象。

重复的属性名称

如果两个属性使用相同的名称,则第二个属性将覆盖第一个属性。

  1. let Person = { 
  2.   name: "NeyVatsa", 
  3.   name: "Shashank" 
  4. }; 
  5. console.log(Person.name); 
  6.   
  7. // Shashank 

New关键字

对象构造函数为给定值创建一个对象封装器。如果该值不存在或未定义,它将创建并返回至一个空对象。否则的话,它将返回至一个与给定值类型一致的对象。

也可以使用new关键字创建对象。使用Javascript中的内置对象构造函数,创建一个新的空对象;或者,此关键字可以与用户定义的构造函数一起使用。首先来看一个例子:

  1. let movies = newObject(); 
  2.   
  3. console.log(movies) 
  4. //{} 

下一步是向此空对象添加属性和方法,可通过简单的点标记来实现:

  1. let movies = newObject(); 
  2.   
  3. console.log(movies) 
  4. //{} 
  5.   
  6. movies.name = "Dead Poets Society"; 
  7. movies.releaseYear = 1989; 
  8. movies.genre = ["Drama", "Teen"]; 
  9. movies.ratings = { 
  10.   IMDb: "8.1 /10", 
  11.   Metacritic: "79%" 
  12. }; 
  13. movies.watch = () => { 
  14.   console.log("WatchOnline"); 
  15. }; 
  16.   
  17. console.log(movies); 
  18. // { name: 'Dead Poets Society', 
  19. //  releaseYear: 1989, 
  20. //  genre: [ 'Drama', 'Teen' ], 
  21. //  ratings: { IMDb: '8.1 / 10',Metacritic: '79%' }, 
  22. //  watch: [Function] } 
  23.   
  24. movies.watch(); 
  25. // Watch Online 

但我不建议这种做法,因为后台有作用域解析,可以检查构造函数是内置的还是用户定义的。

使用ES6类创建对象

此方法与通过用户定义的构造函数使用new关键字非常类似。类是面向对象编程(OOP)的主要组件,可以创建实际上是对象的许多类实例。在ES6规范的支持下,现在可以用类替换构造函数。

  1. classMovies { 
  2.   constructor(name,releaseYear, genre, ratings) { 
  3.     this.name = name; 
  4.     this.releaseYear = releaseYear; 
  5.     this.genre = genre; 
  6.     this.ratings =ratings; 
  7.   } 
  8.   watch() { 
  9.     console.log("WatchOnline"); 
  10.   } 
  11. let rocky = new Movies("Rocky", 1976, ["Drama", "Sports"], { 
  12.   IMDb: "8.1 /10", 
  13.   Metacritic: "70%" 
  14. }); 
  15. console.log(rocky); 
  16. // Movies { 
  17. //     name: 'Rocky', 
  18. //         releaseYear: 1976, 
  19. //             genre: ['Drama','Sports'], 
  20. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '70%' } 
  21. // } 
  22.   
  23. rocky.watch(); 
  24. //Watch Online 

上面示例中,我已经定义了构造函数中的所有参数。方法可以是类的一部分,而声明可以稍后添加到类的创建实例中,成为“对象”:

  1. /* 
  2. above example 
  3. */ 
  4. rocky.buy = function() { 
  5.   console.log("Buy theMovie"); 
  6. }; 
  7. rocky.buy(); 
  8. // Buy the Movie 

而这里方法是对象的一部分,不会影响原始类。

JavaScript中几乎一切都是对象:创建对象的三种方式

图源:unsplash

在JavaScript这一基于原型的继承语言中,类和构造函数都模仿面向对象的继承模型。熟悉类非常有帮助,React这样的流行JavaScript库会经常使用类句法。

免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值