理解ES6 第三章:对象 ---Object.assign给对象添加多个属性, super, 原型。。。

【深入理解ECMAScript 6】 对象的扩展(属性表示法、Object方法、super关键字、对象的扩展运算符) ES6 对象的扩展 文章目录ES6 对象的扩展一、属性表示法1、ES52、ES6二、Object的方法1、Object.is()ES5ES62、Object.assign()三、super关键字四、对象的扩展运算符 一、属性表示法 1、ES5 let name = '张无忌' function sayMe() { console.log('this is 张无忌'); } // ES5 定义对象属性方法 的方式 var obj = { name: name, //第二个name表示变量名 阅读详情

英文电子书点此阅读《understanding es6》

目录

对象

快速初始化属性

不用再专门定义Key-value,直接给出Key,es6会自动在上下文找同名的变量作为value

function createPerson(name, age) {
    return {
        name,
        age
    };
}
简洁的函数定义(只能用于对象method,不能用于全局)
var person = {
    name: "Nicholas",
    sayName() {
        console.log(this.name);
    }
};
可以计算的属性名
var suffix = " name";

var person = {
    ["first" + suffix]: "Nicholas",
    ["last" + suffix]: "Zakas"
};
Object.is()
  • 主要是修正了之前的quirks。比如 +0和-0, 再比如 NaN === NaN

  • 基本等于”===”, 会比较类型和值。仅在正负0和NaN上表现的不一致。

  • 貌似没啥用。。。

console.log(+0 == -0);              // true
console.log(+0 === -0);             // true
console.log(Object.is(+0, -0));     // false

console.log(NaN == NaN);            // false
console.log(NaN === NaN);           // false
console.log(Object.is(NaN, NaN));   // true
Object.assign()
  • 比Object.create() 更好用,用于merge多个对象

  • 后者会覆盖前者,shallow copy, 简单复制,不是可迭代的。

  • 会把后者(supplier)的访问器特性(getter/setter类型的)以数据特性的形式赋予前者(receiver)

同名属性
  • ES5 的严格模式下,一个对象中的有同名属性会报错,但在ES6中不管是严格属性还是非严格属性都不会,后出现的会覆盖(overwrite)前者的值。
自有属性的枚举顺序
  • 数字类型在前,以升序排列
  • string类型和symbol类型的以被添加的顺序排列(怎么赋予的,怎么展示的)
var obj = {
    60:222,
    'work':'coding',
    '3tt':'number in string',
     2:25
}

obj[4]= 'bulabula'
obj[2] = 50

Object.getOwnPropertyNames(obj) //Array(5) ["2", "4", "60", "work", "3tt"]
Object.setPrototypeOf()
  • 改变了对象的原型
let person = {
    getGreeting() {
        return "Hello";
    }
};

let dog = {
    getGreeting() {
        return "Woof";
    }
};

// prototype is person
let friend = Object.create(person);
console.log(friend.getGreeting());                      // "Hello"
console.log(Object.getPrototypeOf(friend) === person);  // true

// set prototype to dog
Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeting());                      // "Woof"
console.log(Object.getPrototypeOf(friend) === dog);     // true
super reference 继承更高一级的类
  • super是一个指针,指向了当前对象的原型,即Object.getPrototypeOf(this)的值。但使用时必须要在对象内部的 简洁方法 中才可以使用,就是 someFunction(){} 这样的写法(吐槽一下,这是为毛啊。。。。用non-concise methods写居然还报语法错误)。

接上段person的代码————

let friend = {
    getGreeting() {
        // in the previous example, this is the same as:
        // Object.getPrototypeOf(this).getGreeting.call(this)
        return super.getGreeting() + ", hi!";
    }
};

Object.setPrototypeOf(friend, person)

let relative = Object.create(friend)

relative.getGreeting()  // Hello, hi!

// 这里如果friend 里的 getGreeting 方法没有用super定义,而是直接绑定的 this 就会因为迭代引用自身而导致栈溢出报错。而super的指向不是动态的,不管有多少子孙后代对象继承了getGreeting 方法,super 始终是person 对象。

正式定义了对象的方法(method)
  • es6 正式定义了method的概念,它作为一个函数,有内置的[[HomeObject]]属性,包含了其所属的对象。这在运用super时非常重要。

  • 一定要用 funcName(){} 式的简洁写法啊。。。

summary
  • 对象字面量,简洁属性定义(找同名变量),计算式的属性名(key值),省略 function 关键字和冒号的简洁方法定义。

  • 允许一个对象中的同名属性,后者覆盖前者。

  • Object.assign(receiver,…suppliers)融和多个属性, Object.is()严格相等

  • 对象属性的枚举顺序:数字类型第一,以升序排列;字符串其次,以添加的顺序排列;symbol最后,以添加的顺序排列

  • Object.setPrototypeOf(target,prototype) 改变对象的原型

  • super 关键词 调用对象的原型上的方法。this会被自动绑定在当前对象上。注意要在简洁式方法定义中 使用。

es6 对象的新增属性 目录 一、属性的简写 二、属性名表达式 三、super关键字 四、扩展运算符的应用 五、属性的遍历 六、对象新增的方法 Object.is() Object.assign() Object.getOwnPropertyDescriptors() Object.setPrototypeOf() Object.getPrototypeOf() Object.keys() Object.values() Object.entries() Object.fromEntries() 一 阅读详情

相关推荐

别再只用跳层连接了!手把手教你用DASI和MDCR模块提升红外小目标检测精度

本文详细介绍了如何利用DASI和MDCR模块提升红外小目标检测精度。通过分析传统跳层连接的缺陷,提出维度感知的特征选择性融合(DASI)和多尺度感受野精炼器(MDCR)的创新方案,显著提升小目标检测性能。实验证明,该方法在多个场景下AP@0.5提升达15.4%,特别适用于安防监控和遥感图像分析。

weixin_28715081的博客 224

js对象新增方法object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。 const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b...

xunhaomeng的博客 760

Kylin-Desktop-V10-SP1海光版虚拟机安装全流程(含桥接网络配置)

本文详细介绍了在VMware虚拟机中安装Kylin-Desktop-V10-SP1海光版操作系统的完整流程,重点解决了基于海光(Hygon C86)平台的网络配置难题。内容涵盖从镜像准备、虚拟机创建、系统安装到桥接网络配置的三种实战方法,并提供了安装后的优化与必备软件配置指南,帮助用户高效搭建国产化测试与开发环境。

weixin_29323493的博客 350

【Object.assign()】JavaScript如何给对象批量添加属性【不改变对象的引用】

参考:Object.assign() - JavaScript | MDNObject.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign ...

weixin_43343144的博客 2422

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 719

URDF模型转换实战:解决SolidWorks到Gazebo的五大常见问题

本文详细解析了从SolidWorks导出URDF模型到Gazebo仿真过程中常见的五大问题及解决方案,包括插件安装、坐标系建立、Link与Joint配置等关键步骤。通过实战经验分享,帮助机器人仿真工程师高效完成模型转换,确保Gazebo仿真准确性。

weixin_29052717的博客 442

006-Object.assign

一、Object.assign简要使用   是ES6新添加的接口,主要的用途是用来合并多个JavaScript的对象。   Object.assign()接口可以接收多个参数,第一个参数是目标对象,后面的都是源对象,assign方法将多个原对象的属性和方法都合并到了目标对象上面,如果在这个过程中出现同名的属性(方法),后合并的属性(方法)会覆盖之前的同名属性(方法)。 var ...

dilv4062的博客 349

codemirror6 制作markdown编辑器(源码模式)

总体上感觉能用,但是不怎么友好,官方文档有点散乱,而且关键字高亮功能是独立出去的,去官方文档找半天,也没找到怎么改。EditorView.theme可以往EditorView模块中修改CSS的样式,从而影响编辑器的样式展示。"### 测试\n\n```javascript\nlet x = 'y'\n```"这个插件中的markdown语法的高亮样式。//这里指定markdown中代码块使用的解析扩展。开头的class样式,并且还需要在选择器前面添加。//markdown语言解析扩展。

qq_43203949的博客 1782

Vue-给对象新增响应式属性(使用Vue.$set()或者Object.assign())

Vue.$set给对象新增属性 在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,不会更新视图。 根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。 受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性...

陈坚泓的博客 2万+

国产FPGA开发实战:紫光同创编程软件中的约束文件详解与常见问题

本文详细解析了紫光同创FPGA编程软件中约束文件的关键配置技巧与常见问题。通过基础架构解析、时钟约束实践、物理约束调控及典型问题排查指南,帮助开发者高效掌握国产FPGA开发中的约束文件应用,提升开发效率与设计稳定性。

gin88的博客 901

同物种,不同版本之间的坐标转化

是最常用的工具,如果有可用的链文件,这通常是最便捷的方法。CrossMap是一个功能强大的替代工具,支持多种文件格式和物种。自定义生成链文件适用于没有现成资源的情况,虽然复杂一些,但可以满足特定需求。Ensembl 和 Gramene提供的工具适用于支持的物种,尤其在植物基因组领域可能更具优势。选择合适的方法取决于你正在处理的物种、基因组版本以及现有的资源。

qq_40256654的博客 1851

es6之assign用法(对象添加属性、方法、浅拷贝)

assign使用注意点 //浅拷贝:Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。 const obj1={a:{b:1}}; const obj2=Object.assign({},obj1); obj1.a.b=2; console.log(obj2.a.b)//2 //遇到同名属性进行替换,而不是...

起风了 5997

帆软报表开发-快速入门

数据可视化展示功能特点如下:选择权限管理 > 用户最终权限 > 汤姆(Tom) > 选择图表设计入门 > 打开查看权限。

郭宝的博客 5968

ES6之对象的扩展

TOC?/TOC。

BradenHan的专栏 1308

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【深入理解ES6】对象

对象的分类 普通对象(Ordinary Object):具备Javascript 对象所有的默认内部行为。 特异对象(Exotic Object):具备某些与默认行为不符的内部行为。 标准对象(Standard Object):ES6中定义的对象,例如 Array、Date 等。既可以是普通对象,又可以是特异对象 内置对象(Build-in Object):JS脚本中的环境对象(window、document等) 对象字面量的扩充 属性初始值简写 // ES5 function create.

wgf1997的博客 1539

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[ES6]---对象的扩展(Object方法、super关键字等)

文章目录对象的扩展对象的属性表示法Object的方法Object.is()的方法Object.assign()的方法super关键字对象的扩展运算符 对象的扩展 对象的属性表示法 ES5的用法 let name = '林俊杰' function sayMe() { console.log('this is 林俊杰') } //ES5定义对象的属性和方法 var obj = { name: name, //第二个name表示变量名 sayMe: sayMe //第二个sayMe表示函

IT_qslong的博客 345

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ES6——扩展对象的功能

扩展对象的功能 属性初始值的简写 function createPerson(name, age){ return { name, //相当于name: name age } } var person = createPerson('wjc', 21); console.log(person); 即当属性名和属性值用一样的字符表示时就可以简写成一个 对象方法的简写 var pers...

五柳 294

深入理解ES6扩展的对象的方法

ES6注重于对象的效用,几乎所有的值都是某种类型的对象。并且随着复杂度的增长,对象的使用量也在增长,对象方法的扩展就尤为重要,此篇文章将讲述ES6扩展的对象的方法。

tjlcy2019的博客 296

ES6对象新增了哪些扩展和方法

Object.getOwnPropertyNames(obj):回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。Object.keys(obj):返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。返回一个对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对的数组。返回自身的(不含继承的)所有可遍历(enumerable)属性的键名的数组。在解构赋值中,未被读取的可遍历的属性,分配到指定的对象上面。

贫僧法号依平 954

Freebase知识图谱数据集:结构解析、本地落地与FB15k-237评测

知识图谱以实体、属性和关系组织结构化知识,底层常用 RDF 三元组、唯一标识与类型系统表达。Freebase 是开放域知识库,用 MID 标识 Topic,通过 N-Triples dump 提供可流式解析的大规模数据,并以 Domain/Type/Property 和 CVT 中介节点描述复杂关系。其技术价值在于 schema 规整、数据可复现,适合做实体链接、别名归一、知识图谱嵌入与 KBQA 评测。工程上,围绕 dump 下载、完整性校验、Python 流式解析、子集切分和 SPARQL 入库,可以低

weixin_33910137的博客 408

学习记录--《深入理解ES6》之扩展的对象功能

对象字面量语法的扩展 属性初始化器的速记法 在ES5及更早版本中,对象字面量是“键/值对”的简单集合。这意味着在属性值被初始化时可能会有些重复。 functiong createPerson(name,age){ return { name : name, age : age }; } 在ES6中,你可以使用属性初始化器的速记法来消除对象名称与本地变量重复情况。当对象的一个属性名称与本地变量名相同时,可以简单书写名称而省略冒号与值。 function createPerson(name

chenjk的博客 222

深入理解ES6 --- 对象

对象字面量语法扩展 (1) 属性初始值简写 为对象字面量属性赋值为同名的局部变量时,不必再写: 和值,只写属性名即可。这种写法不仅简洁,而且也有助于消除命名错误, let name = '漓漾li' let age = 18 // es5 let es5Info = { name: name, age: age, } // es6 let es6Info = { name,...

weixin_33924312的博客 148

ES6中对象新增了哪些扩展?

一、属性的简写 ES6中, 当对象键名与对应值名相等的时候,可以进行简写, 当对象键对应的值是个方法的时候,也可以进行简写 const foo = 'hello world!' const o = { say: function() { return "Hello!"; }, foo:foo } // 等同于 const o = { say() { // 值为方法,简写 return "Hello!"; }, foo.

yiyueqinghui的博客 503

js中ES6新增对象方法详解(建议收藏)

严格判断两个值是否相等,与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是。返回一个对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对的数组。返回自身的(不含继承的)所有可遍历(enumerable)属性的键对应值的数组。返回自身的(不含继承的)所有可遍历(enumerable)属性的键名的数组。注意,属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串。在解构赋值中,未被读取的可遍历的属性,分配到指定的对象上面。方法的第一个参数是目标对象,后面的参数都是源对象。

常来常往,共同成长 685

ES6 对象的扩展

目录 第四章 扩展对象的功能性对象类别对象字面量语法扩展属性初始值的改写对象方法的简写可计算属性名新增方法Object.is()方法Object.assign()方法重复的对象字面量属性自有属性枚举顺序增强对象原型改变对象原型简化原型访问的super引用正式的方法定义 第四章 扩展对象的功能性 对象类别 普通(Ordinary)对象:具有JS对象所有默认内部行为。 特异(Exotic)对象:具有...

weixin_30407613的博客 104

深入理解ES6读书笔记4:扩展的对象功能

一、对象字面量语法的扩展 1、属性初始化器的简写 ES6中函数的属性名和参数名相同时,可以省略属性名后面的冒号和值。 因为当对象字面量中的属性只有名称时,JS 引擎会在周边作用域查找同名变量。 //ES5及更早版本 function createPerson1(name, age){ return{ name: name, age: age }; } var person1 = createPerson1('张三', 20); console.lo.

gdjlc的专栏 199
上一篇: 理解es6---第三章 函数(箭头函数,spread parameters, rest parameters, 匿名参数)
下一篇: 操作系统清华大学版笔记(十二)文件系统,文件描述符,和文件
十方魔
博客等级 码龄10年 202粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值