1、Object.is方法返回布尔值,和全等于===差不多,除了参数是+0和-0,以及NaN时

            //Object.is,返回布尔值,和全等于===差不多,除了+0和-0,以及NaN
console.log(Object.is(+0,-0)); //false
console.log(+0 === -0); //true
console.log(Object.is(NaN,NaN)); //true
console.log(NaN === NaN); //false console.log(Object.is(true,false)); //false
console.log(Object.is(true,true)); //true

2、Object.assign方法返回一个对象,在复制或者合并一个对象时很常用到。

该方法用起来和扩展运算符很相似,属性名相同时,后面的会覆盖前面的。并且也是浅拷贝。

assgin(a,b)是将b对象中所有可枚举属性的值复制到目标对象a, 如果存在相同的属性,就将b对象中属性对应的值替换a对象的属性值。
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
语法:Object.assign(target, ...sources)
参数:
target:目标对象。
sources:源对象。
返回值:目标对象。

            //Object.assign,在复制或者合并一个对象时很常用到
const obj = Object.assign({a:1},{b:2},{c:3},{d:4,e:5})
console.log(obj); //{a:1,b:2,c:3,d:4,e:5}
//用起来跟扩展运算符很相似,属性名相同时,后面的会覆盖前面的。并且也是浅拷贝
const obj11 = {
a:1,
b:{
c:2
}
};
let newObj1 = Object.assign({a:3},obj11); //{a:1,b:2,c:3,d:4,e:5}
console.log(newObj1.b.c); //2
newObj1.b.c = 100;
console.log(obj11.b.c); //100

3、Object.keys返回自身可枚举属性的所有key所组成的数组

Object.values返回自身可枚举属性的所有value所组成的数组

Object.entries返回每一对可枚举的key value所组成数组的数组

            //Object.keys Object.values Object.entries

            const obj22 = {
a:1,
b:2,
c:3,
d:4
}
//Object.keys返回自身可枚举属性的所有key所组成的数组
console.log(Object.keys(obj22)); //["a","b","c","d"] //Object.values返回自身可枚举属性的所有value所组成的数组
console.log(Object.values(obj22)); //[1,2,3,4] //Object.entries返回每一对可枚举的key value所组成数组的数组
console.log(Object.entries(obj22)); //[Array(2),Array(2),Array(2),Array(2)]

三个方法返回的都是自身可枚举的属性,也就是说使用for-of进行遍历的时候不需要像for-in一样使用hasOwnProperty()去判断是不是自身的,而不是原型上的属性

      //代码接上

            //三个方法返回的都是自身可枚举的属性,也就是说使用for-of进行遍历的时候不需要像for-in一样使用hasOwnProperty()去判断是不是自身的,而不是原型上的属性
for (let key of Object.keys(obj22)){
console.log(key); //打印结果是四行,分别是a b c d
} for(let [k,v] of Object.entries(obj22)){
console.log(k,v); //打印结果是四行,分别是a 1,b 2,c 3,d 4
}

4、__proto__属性这个属性代表当前对象的原型

            //__proto__这个属性代表当前对象的原型
//该属性位于在es6标准的附录中,在实际编码的时候尽量不要用到,调试编码的时候看看就好
const obj = {
a:1
}
console.log(obj.__proto__); //Object
5、Object.setPrototypeOf(要修改原型的对象,新原型 )方法可以用来修改一个对象的原型。
但是性能有些低下,建议不要使用。setPrototypeOf()方法性能低的原因是:设置原型可能会降低有权访问其原型已发生改变的所有 JavaScript 代码的性能。建议使用OBject.create()。
setPrototypeOf() 

作用:Object.setPrototypeOf() 方法是设置一个指定的对象的原型到另一个对象

用法:Object.setPrototypeOf(obj, prototype)
第一个参数是要设置其原型的对象;第二个参数是要作为新的原型的对象
            //Object.setPrototypeOf(要修改原型的对象,新原型 )方法可以用来修改一个对象的原型
const obj1 = {
a:1
};
const obj2 = {
b:1
}
const obj = Object.create(obj1); //create方法是创建一个对象的时候指定它的原型
console.log(obj.__proto__); //{a:1}
Object.setPrototypeOf(obj,obj2); //这个方法性能有点低下,建议不要使用
console.log(obj.__proto__); //{b:1}
6、Object.getPrototypeOf(对象名)方法读取对象的原型(跟__proto__相比起来,更推荐使用getPrototypeOf)

            //Object.getPrototypeOf方法读取对象的原型
const obj1 = {a:1};
const obj = Object.create(obj1); console.log(obj.__proto__); //{a:1}
console.log(Object.getPrototypeOf(obj)); //{a:1}
console.log(obj.__proto__ === Object.getPrototypeOf(obj)); //true

PS:推荐使用Object.create和getPrototypeO方法去操作对象的原型


7、super关键字,它可以访问到原型对象上的属性和方法(但是只有在使用简洁表示法的的时候才生效)
作用:是访问到对象的原型;可以访问和调用一个对象的父对象上的函数;
 
            //super关键字,它可以访问到原型对象上的属性和方法
//要注意的是,对象只有使用简洁表示法的时候super关键字才能访问原型属性
const obj = {name:'xiaoming'};
const cObj = {
//如果写成say:function(){}或者箭头函数say:()=>{}是不能使用super的,会报错
say(){
console.log(`My name is ${super.name}`);
}
}
Object.setPrototypeOf(cObj,obj);
cObj.say();

this关键字是指向函数所在的当前对象,

ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。
 
 

ES6对象扩展——部分新的方法和属性的更多相关文章

  1. ES6对象扩展

    前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...

  2. ES6(对象扩展)

    ES6(对象(object)新增特性) 1.简介表示法 o,k 为属性:这种为无方法的情况. 这种为有方法. 2.属性表达式 ES6中,[a]就是 b . 3.新增API 1.数组也是引用类型 2.O ...

  3. es6 对象浅拷贝的2种方法

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. Easyui扩展或者重载(方法和属性)

    1: 使用$.fn.datagrid.defaults.editors重载默认值. 每个编辑器都有以下方法: 名称 属性 描述 init container, options 初始化编辑器并返回目标对 ...

  5. ES6 - 对象扩展(增强字面量)

    /** * 对象的扩展 * * 增强对象字面量 * * 解决问题:缩减代码 */ { /** * 1.属性简表示法 * 变量foo直接写在大括号里面.这时,属性名就是变量名, 属性值就是变量值 */ ...

  6. ES6 对象扩展

    1.属性和变量可以简写 let birth = '2000/01/01'; const Person = { name: '张三', //等同于birth: birth birth, // 等同于he ...

  7. ES6对象扩展——扩展运算符

    1.复制对象:使用扩展运算符复制对象时是浅拷贝 //复制对象:使用扩展运算符复制对象时是浅拷贝 const obj1 = { a:1, b:2, d:{ aa:1, bb:2 } } const ob ...

  8. 当调用对象中不存的方法、属性时,__getattr__的应用场景

    一.Python中创建类和实例的调用顺序 new(cls) 创建对象前调用,如果类中没定义,会一直向父类找,直到object的 new 方法创建类.cls代表类本身 init(self) 创建类实例后 ...

  9. ES6中数组的新方法

    数组的扩展 1.1扩展运算符 1.1.1:... 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. <body> < ...

随机推荐

  1. charles f配置sslproxy 对protobuf 接口抓包 -不推荐

    charles 配置sslproxy help-安装电脑证书 手机连接访问电脑,下载允许手机 手机连接vpn 手机访问chls.pro/ssl -下载证书 request可以看到protobuf_tx ...

  2. 多个filter如何决定调用顺序

    答案是:web-inf中的web.xml决定

  3. JS进度条顺滑版实现

    进度条不顺滑 相信大多前端同学都自己写过音频.视频播放器,实现并不复杂.最近在小程序里,做了一个类似微博刷视频的需求.其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条不顺滑,而后想查查 ...

  4. java正则匹配字符串例子

    import java.util.regex.Matcher;import java.util.regex.Pattern; public class sss { public static void ...

  5. Redis.conf分析

    Redis.conf 单位 配置文件对大小写不敏感 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1m ...

  6. vue 子目录配置,负载均衡 nginx

    1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue   域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...

  7. Spring学习笔记-DI(依赖注入)

    构造器注入(见前贴) Set注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象的所有属性由容器来注入 [环境搭建] 复杂类型 // Class Address ...

  8. 华为eNSP基础入门-配置SSH远程登录

    eNSP 华为模拟器ensp (Enterprise Network Simulation Platform) 是华为官方推出的一款强大的图形化网络仿真工具平台,主要对企业网路由器.交换机.WLAN等 ...

  9. 【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 引言 不知道有多少人是和我一样分不 ...

  10. Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法

    本博客包含的内容: ①手动安装jar包到本地仓库: ②解决Missing artifact org.source.fastdfs:fastdfs:jar问题 .personSunflowerP { b ...