ES6笔记 10.super、4种遍历方式、原型、symbol遍历

本文介绍了ES6中操作原型的方法,如Object.getPrototypeOf和Object.setPrototypeOf,以及Object.keys、values和entries等遍历对象的方法。同时,详细探讨了super关键字的使用,并详细阐述了Symbol的基本概念、在对象中的应用以及Symbol.for和Symbol.keyFor的用途。文章还讨论了针对Symbol的遍历特性和不同枚举方式的特点。
摘要由CSDN通过智能技术生成

ES6 操作 prototype 的方法

原始修改原型的方式缺点

  1. 语义化,内部属性
  2. 访问效率慢
  3. 所有继承自该原型的对象都会影响到

Object.getPrototypeOf()方法,获取原型

Object.setPrototypeOf(被设置原型的对象, 新原型对象)方法,设置原型

返回值为 被设置原型的对象

var obj = {
   
  name: "xiaoming",
};
var obj2 = {
   
  name: "xiaohong",
};
var o = Object.setPrototypeOf(obj, obj2);
console.log(o);
console.log(o === obj); // true

当 第二个参数 为 null 时,将对象的原型设置为 null

当 第一个参数 是原始数据类型时,Object.setPrototypeOf()干了些什么?

  1. 首先将原始值类型包装成对象的形式
  2. 然后通过获取原型的方式进行获取原型
  3. 总结为:如果当前 第一个参数 不是对象,setPrototypeOf 尝试利用相应的包装类进行包装成对象的形式,然后默认设置新的原型失败,返回原始值
let obj = Object.setPrototypeOf(1, {
    a: 1, b: 2 });
console.log(obj); // 1
console.log(Object.getPrototypeOf(obj) === Number.prototype); // true
console.log(Object.getPrototypeOf(1) === Number.prototype); // true
console.log(Object.getPrototypeOf(1)); // Number包装类对象

三大包装类设置指定原型默认失败

let obj = Object.setPrototypeOf("foo", {
    a: 1, b: 2 }); // String包装类对象
let obj = Object.setPrototypeOf(1, {
    a: 1, b: 2 }); // Number包装类对象
let obj = Object.setPrototypeOf(true, {
    a: 1, b: 2 }); // Boolean包装类对象
console.log(Object.getPrototypeOf(obj));

undefined、null 设置原型失败 Uncaught TypeError: Object.setPrototypeOf called on null or undefined

let obj = Object.setPrototypeOf(undefined, {
    a: 1, b: 2 });
let obj = Object.setPrototypeOf(null, {
    a: 1, b: 2 });
console.log(obj); // TypeError: Object.setPrototypeOf called on null or undef
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值