JavaScript 对象创建的3种方法


Posted in Javascript onNovember 17, 2021

前言:

JavaScript中,对象是一组有属性名和属性值组成的无序集合,对象的创建可以通过对象字面量、new 关键字 和Object.create()函数来创建。

1、对象字面量

let obj = {}  // 空对象
let obj2 = {a:1, b:2}

let obj3 = {" hel": "wold"}  // 属性名如果有空格,可以用字符串字面量作为属性名

2、new 关键字创建对象

使用 new 关键字后面调用构造函数,创建一个新的对象

let o = new Object(); // 内置的构造函数

let m = new Math();

let a = new Array();

let d = new Date();

function Person(){  //自定义构造函数

}
let person = new Person()

3、使用 Object.create() 创建对象

let o = Object.create({x:1, y:2});
console.log(o.x+o.y) //3

新对象o 将继承 {x:1, y:2} ,属性x和y称为继承属性, 如果传入的参数是null,则这个对象不会继承任何对象。被继承的对象又称之为“原型”。

Object.create(null)

4、 使用扩展操作符:...

ES2018新增了扩展操作符...,将已有的对象属性复制到新的对象中

let foo  = {x:1, y:2}
let bar  = {z:3}

let zoo = {...foo, ...bar}

console.log(zoo) // {x:1, y:2, z:3}

需要注意的几点:

  • 扩展操作符只扩展对象的自有属性,继承属性不支持扩展
  • 如果扩展对象和被扩展的对象有相同名字的属性,属性的值由后面的对象决定

5、使用Object.assign()方法

assign 可以把一个对象的属性复制到另一个对象, assign 接收两个或多个参数,第一个参数为目标对象,第二个及后续参数为来源对象,函数将把来源对象的属性复制到目标对象,并返回目标对象。

let foo  = {x:1, y:2}
let bar  = {z:3}

let zoo = {}

let obj = Object.assign(zoo, foo, bar)

console.log(zoo)  // {x:1, y:2, z:3}

console.log(obj===zoo) // true

另外补充两个ES6中新增的对象特性

6、简写属性

如果想创建多个变量名和对应值组合成的对象,原来需要像传统对象字面量语法构建对象

let x=1, y =2;
let o = {x:x, y:y}

console.log(o) // {x:1, y:2}

ES6之后可直接简写属性,省去分号和属性名

let o2 = {x, y}

console.log(o2) // {x:1, y:2}

7、简写方法

在对象中定义方法时,ES6以前需要,定义方法时需要像定义普通属性一样,通过函数表达式定义方法

let point={
    x:1,
    y:2,

    area: function(){
        return this.x*this.y
    }
}

console.log(point.area()) //2

ES6之后可以省略冒号和function关键字,以一种简单的方式来定义对象的方法。

let point2={
    x:1,
    y:2,

    area(){
        return this.x*this.y
    }
}

console.log(point2.area()) //2

到此这篇关于JavaScript 对象创建的3种方法的文章就介绍到这了,更多相关JavaScript 对象创建方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Ext grid 添加右击菜单
Nov 26 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
JS实现闪动的title消息提醒效果
Jun 20 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
BootStrap实现轮播图效果(收藏)
Dec 30 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
vue 挂载路由到头部导航的方法
Nov 13 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
vue+moment实现倒计时效果
Aug 26 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 #Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 #Javascript
JavaScript高级程序设计之变量与作用域
javascript对象3个属性特征
详细聊聊浏览器是如何看闭包的
Vue3中的Refs和Ref详情
Nov 11 #Vue.js
react 路由Link配置详解
Nov 11 #Javascript
You might like
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python中必要的名词解释
2019/11/20 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
两道JAVA笔试题
2016/09/14 面试题
火锅店的活动方案
2014/08/15 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android