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. Leetcode:230. 二叉搜索树中第K小的元素

    Leetcode:230. 二叉搜索树中第K小的元素 Leetcode:230. 二叉搜索树中第K小的元素 思路: 利用BST的中序历遍的结果为其排序后的结果,我们可以利用其特性直接找到第k个中序遍历 ...

  2. 【LeetCode】145. 二叉树的后序遍历

    145. 二叉树的后序遍历 知识点:二叉树:递归:Morris遍历 题目描述 给定一个二叉树的根节点 root ,返回它的 后序 遍历. 示例 输入: [1,null,2,3] 1 \ 2 / 3 输 ...

  3. ML-支持向量机(SVM)

    简介 支持向量机是一种二分类模型,寻找一个超平面来对样本进行分割,分割的原则是保证间隔最大化. 如果一个线性函数能够将样本分开,称这些数据样本是线性可分的. 在二维空间线性函数就是一条直线,在三维空间 ...

  4. 【洛谷P5008 逛庭院】tarjan缩点+贪心

    既然没有题解,那么我就来提供给一份. -- 首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪 ...

  5. java中 字符串的构造方法和直接创建

    java.long.String类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.(程序当中所有的双引号字符串,都是String类的对象[没 ...

  6. WanJetpack项目:用Jetpack实现玩Android,追求最官方的实现方式

    项目简介 玩Android demo.用Jetpack MVVM开发架构.单Activity多Fragment项目设计,项目结构清晰,代码简洁优雅,追求最官方的实现方式.用到以下知识点: LiveDa ...

  7. Python从零开始编写控制程序(一)

    Python之从零开始编写控制程序(一) 在此声明:本博客仅供学习参考,任何产生相关违法犯罪行为与本人无关. 另外如果有师傅有好的思路和想法,可以和我一起沟通交流. 最近在一直尝试做Powershel ...

  8. RHCAS_DAY06

    vi/vim文本编辑器 Vim是从 vi 发展出来的一个文本编辑器,vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性 vi/vim 共分为三种模式:命令模式.输入模式.底线命令模式(末 ...

  9. HCNA Routing&Switching之STP选举规则

    前文我们了解了二层环路对网络带来的影响,以及STP工作流程和BPDU数据包结构和相关字段的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15121317. ...

  10. Tomcat服务器种的HttpServletRequest类

    HttpServletRequest 类有什么作用:             每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Reque ...