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. 动态 WebApi 引擎使用教程(3行代码完成动态 WebApi 构建)

    目录 什么是 WebApiEngine? 开源地址 使用方法 使用 [ApiBind] 标签让任何方法变成 WebApi 对 API 进行分类 自定义 API 名称 复制特性 为整个类配置 WebAp ...

  2. 【洛谷P1318积水面积】最小生成树

    我写一篇绝对原创的题解,算法原创,求洛谷通过!!!(让更多人看到这篇题解) 绝大多数人肯定认为这道题是一道模拟题 以下为正解 我们来看一下这一道题,其实就是找到左右高点,在模拟. 但是这个是正常人的想 ...

  3. 一台电脑安装两个不同版本的MySQL

    背景: 本人电脑上已有mysql-8.0.12-winx64,并且可以使用.但由于工作需要,得使用mysql-5.5.59-winx64,已有mysql-5.5.59-winx64的解压好的安装包 参 ...

  4. [源码解析] 机器学习参数服务器ps-lite (1) ----- PostOffice

    [源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 目录 [源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 0x00 ...

  5. 冒泡排序(bubble_sort)——Python实现

      # 冒泡排序 # 作用:对给出的n个顺序不定的数进行排序 # 输入:任意数组A # 输出:按顺序排列的数组A   # 冒泡排序过程 # 第一趟:以第一个数为基准,从最后一位数开始,依次与它比较, ...

  6. 深入刨析tomcat 之---第10篇 how tomcat works 第13章,Response 发送错误信息 sendError

    writedby 张艳涛 在浏览器中发送一个错误应用url 那么tomcat是如何发送错误的呢? 基本上是发送http 的response协议,分为两部分一部分是response设置头信息, 那么先分 ...

  7. 如何在windows 11中安装WSLG(WSL2)

    什么是 WSL WSL(Windows Subsystem for Linux):Windows 系统中的一个子系统,在这个子系统上可以运行 Linux 操作系统. 可以让开发人员直接在 Window ...

  8. Go通关04:正确使用 array、slice 和 map!

    Array(数组) 数组存放的是固定长度.相同类型的数据. 数组声明 var <数组名> = [<长度>]<元素>{元素1,元素2} var arr = [2]in ...

  9. for循环排它算法(经典实用)

    核心代码 let lis = document.querySelectorAll("li"); for(let i = 0; i < lis.length; i ++) { ...

  10. 面试了一位33岁Android程序员,只会面向百度编程,居然要25k,脸呢?

    最近逛论坛看到这样一个帖子: 面试了一位工作12年的程序员, 这位老哥有3年java开发经验,2年H5,7年Android开发经验,简历上写着精通Java,Android,熟悉H5开发.没有具体的技术 ...