今天来简单说下ES6 中对象的扩展

首先回顾传统的对象表示法

let person={ 'name':'zhang', 'age':'20', 'play':function(){ alert('play!') }}

再来看看ES6中写法

var name='zhang';var age=20;var person={name,age};console.log(person) // {name: "zhang", age: 20};

这是对象的属性,那么对象的方法呢

var person={ play(){ alert('ES6 中的play!'); }}

不难看出,ES6 在写法上简洁了很多。

字面量表达式即用字面量定义一个对象的时候,可以用表达式作为对象的属性名或者方法名。

看例子

var m="my";var n="name";var p="play";var person={ [ m+n ]:'zhang', [ m+p ](){ return "play"; }};console.log(person.myname)// zhangconsole.log(person.myplay)// play

上面person对象的定义,其中属性名和方法名都是用中括号[],里面是字符串相加的表达式,

所以说用字面量(即大括号{})定义对象的时候,属性名和方法名可以是一个表达式,表达式的运算结果就是属性名或者方法名。

还有一些对象新增的函数

(1)Object.is()

函数的作用:比较俩个值是否严格相等,也可以说全等。

这里再扩展下严格相等和抽象相等

代码说话:

var str='20';var age=20;// 抽象相等str == age // true// 严格相等str === age // false

可以看出 == 和 === 的区别,严格情况下,不仅值相等,类型也必须相等,否则会返回 false

回到我们的函数,它的作用和严格一样

var str='20';var mine=20;var her=20;Object.is(str,mine) // falseObject.is(mine,her) // true

(2)Object.assign()

函数作用:将源对象的属性赋值到目标对象上。

太官方,老样子,看代码

// 可看做目标对象let target={'a':1};// 可看做源对象let origin={"b":2,"c":3};Object.assign(target,origin);console.log(target);// {a: 1, b: 2, c: 3}

可以看出target 对象已经被改变。

当然,Object.assign( )函数的参数还可以是多个

// 可看做目标对象let target={'a':1};// 可看做源对象let origin1={"b":2,"c":3};let origin2={"d":4,"e":5};Object.assign(target,origin1,origin2);console.log(target);// {a: 1, b: 2, c: 3, d: 4, e: 5}

这里需要注意一下:赋值过程中如果出现了相同的属性名,那么后面属性值的就会覆盖前面的。

小小总结下:利用Object.assign( )函数的功能,我们可以完成很多效果,比如:给对象添加属性和方法,克隆对象,合并多个对象,合并参数,为对象的属性指定默认值。

此外,它还可以拷贝数组:

let arr=['z'.'h','a','n','g'];let arr2=Object.assign([],arr);arr2.push('end');console.log(arr2); // ['z'.'h','a','n','g','end']console.log(arr); //['z'.'h','a','n','g']

(3)Object.getPrototypeOf()

函数作用:获取一个对象的prototype属性。

话不多说:

function Person(){ // 自定义一个Person类(函数) } Person.prototype = { // 函数都有一个预属性prototype对象 say(){ // 给prototype对象添加一个say方法 console.log('hello'); } }; let zhang = new Person(); // 实例化Person对象,赋值给变量zhang zhang.say(); //调用类的say方法 结果:hello Object.getPrototypeOf(zhang); // 获取zhang对象的prototype属性 // 结果:{say:function(){.....}}

有获取就有设置,那么:

(4)Object.setPrototypeOf()

function Person(){ // 自定义一个Person类(函数) } Person.prototype = { // 函数都有一个预属性prototype对象 say(){ // 给prototype对象添加一个say方法 console.log('hello'); } }; let zhang = new Person(); // 实例化Person对象,赋值给变量zhang zhang.say(); //调用类的say方法 结果:hello Object.setPrototypeOf( //使用Object.setPrototypeOf zhang, {say(){console.log('hi')} });zhang.say(); //再次调用类的say方法 结果:hi

通过这个来修改对象prototype的内容。

可以看出修改之后我们再一次调用zhang.say( );得到的结果是打印出hi,说明我们修改成功了。

对象的延伸就先到这儿...

原文发布时间为:2021年05月21日2021年05月21日原文作者:前端喵

本文来源:开源中国 如需转载请联系原作者

es6调用c语言sdk,ES6 关于对象的扩展-contracts-WinFrom控件库|.net开源控件库|HZHControls官网...相关推荐

  1. 华为 面试 c语言 编程题,传说中华为的面试编程题-php 创建ecs-WinFrom控件库|.net开源控件库|HZHControls官网...

    本人只会Python,于是下面所有试题都是按Python 3.5编写. 请用任意语言完成下列试题: 1)两个字符串A.B.从A中剔除存在于B中的字符.比如A="hello world&quo ...

  2. C语言阅读程序输出星号井号,第1章 C语言概述-python的长整型-WinFrom控件库|.net开源控件库|HZHControls官网...

    声明:文中观点仅代表个人,其中文字.图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:80368704@qq.comQQ:80368704 第1章 C语言概述 1.1和1. ...

  3. c语言 gt 5u,Linux之sar命令-php面向对象实例-WinFrom控件库|.net开源控件库|HZHControls官网...

    Linux之sar命令01 sar命令简介 Linux中的sar命令是系统运行状态的统计命令,他讲指定的操作系统状态显示到标准的输出设备中,它的全称是system activity reporter, ...

  4. Go语言从入门到规范-1.1、Go语言官网文档大纲及环境搭建

    Go语言从入门到规范-1.1.Go语言官网文档大纲及环境搭建 文章目录 Go语言从入门到规范-1.1.Go语言官网文档大纲及环境搭建 前言 一.go简介及学习路径 二.安装go 1.下载Go发行版 2 ...

  5. ECMA2015(ES6)简单入门-9-对象-对象的扩展-对象的新增方法

    对象的创建 使用Object构造函数来创建一个对象 使用对象字面量创建一个对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 本身也有缺陷,就是实例共享了引用类型friends,从下面的代 ...

  6. ES6 数组、对象的扩展

    8. 数组的扩展 扩展运算符(...),将一个数组转为用逗号分隔的参数序列. 复制数组 const a2=[...a1] 合并数组 [...arr1, ...arr2, ...arr3]; arr1. ...

  7. 如何使用ES6在JavaScript中有条件地构建对象

    by Knut Melvær 通过纳特·梅尔瓦 如何使用ES6在JavaScript中有条件地构建对象 (How to conditionally build an object in JavaScr ...

  8. [ES6] 细化ES6之 -- 对象的扩展

    对象的属性 属性表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法 ES5 let name = "张无忌"; function sayMe() {cons ...

  9. 【ES6】阮一峰ES6学习(四) 对象的扩展

    对象的扩展 1. 属性的简洁表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; ...

最新文章

  1. 人脑启发AI设计:让神经网络统一翻译语音和文本
  2. ipad运行python爬虫_Python爬虫之UserAgent的使用实例
  3. 移动应用交互设计中合理使用动态
  4. layui 自定义排序_thinkphp5+layui异步修改排序
  5. [Catalan数三连]网格有趣的数列树屋阶梯
  6. php获取src,PHP读取文件
  7. 工具使用——印象(汇总)
  8. 老师们的神操作,但凡有一个是我的老师,我必定能上清华
  9. 他为华裔写了几封信......
  10. python中函数的参数_Python小知识-Python中的函数参数(基础篇)
  11. vue创建项目卡住不动,vue create project卡住不动 解决办法
  12. navicat报错SSH:Unable to load key
  13. GHOSTXP_SP3电脑公司装机特别版 V30.0[NTFS]
  14. css 常用的各种中文字体
  15. marvin java_JAVA使用Marvin在图片中搜索图片
  16. 网络入侵检测系统之Suricata(七)--DDOS流量检测模型
  17. MySQL事务 - 自增ID的回滚以及Auto Increment在InnoDB的实现
  18. 一文带你读懂 Promise
  19. softlayer iso_从Go编程语言获取SoftLayer API的命令
  20. jfif怎么改成jpg,jfif转jpg方法

热门文章

  1. 我可以隐藏HTML5号码输入的旋转框吗?
  2. 在Vim中将DOS行尾转换为Linux行尾
  3. oracle安装错误10301,Oracle数据库案例整理-Oracle系统运行时故障-表空间所在的目录没有可用空间导致收集统计信息失败...
  4. 电脑打开任务管理器的方法有哪几种
  5. java multiple_Java Math multipleExact()使用方法和实例
  6. 正则表达式查找字符串_如何简单理解正则表达式?只需1分钟就可以看到她优美的舞姿...
  7. 全向轮机器人运动模型及应用分析(图片版)
  8. nginx 带宽_Nginx日志如何分析 GoAccess
  9. Open3d之多视角点云配准
  10. transform 二维转变