• Object函数的内置方法 Object.getPrototypeOf和Object.setPrototypeOf


    Object.getPrototypeOf

    一、定义

    Object.getPrototypeOf()方法用于获取指定对象的原型对象。

    二、语法

    Object.getPrototypeOf(obj);

    参数

    obj:要获取原型对象的对象。

    返回值

    返回指定对象的原型对象或null。

     

    在ES5中,如果传递给方法的参数不是对象,则会抛出TypeError异常。

    在ES6中,如果传递给方法的参数不是对象,则会强制类型转换为对象。

    三、示例

    示例1:获取对象的原型对象

    var a = {};
    Object.getPrototypeOf(a) === Object.prototype; // true
    
    var b = 123;
    Object.getPrototypeOf(b) === Number.prototype; // true
    
    var c = 'abc';
    Object.getPrototypeOf(c) === String.prototype; // true
    
    var d = false;
    Object.getPrototypeOf(d) === Boolean.prototype; // true
    
    var e = null;
    Object.getPrototypeOf(e); // TypeError: Cannot convert undefined or null to object
    
    var f = undefined;
    Object.getPrototypeOf(f); // TypeError: Cannot convert undefined or null to object
    
    var g = Symbol('g');
    Object.getPrototypeOf(g) === Symbol.prototype; // true

    示例2:针对没有原型对象的对象进行操作

    // 创建一个没有原型对象的对象
    var obj = Object.create(null);
    Object.getPrototypeOf(obj); // null

    Object.setPrototypeOf

    一、定义

    Object.setPrototypeOf()方法用于将指定对象的原型对象设置到一个新的对象或null上。

    二、语法

    Object.setPrototypeOf(obj, proto);

    参数

    obj:要设置原型对象的对象。

    proto:该对象的新原型对象或null,否则抛出TypeError异常。

    返回值

    设置了新的原型对象的对象。

     

    注意:该操作实际上是个很耗时的操作,如果对性能有更高的要求,不建议直接修改已有对象的原型,而应该通过Object.create()方法来创建一个新的对象。

    三、示例

    示例:修改对象的原型对象

    var obj1 = { a: 1 };
    // obj2的原型是obj1
    var obj2 = Object.create(obj1);
    Object.getPrototypeOf(obj2) === obj1; // true
    obj2.a; // 1
    
    var obj3 = { b: 2 };
    // 修改obj2的原型为obj3
    Object.setPrototypeOf(obj2, obj3);
    Object.getPrototypeOf(obj2) === obj3; // true
    obj2.a; // undefined
    obj2.b; // 2
  • 相关阅读:
    读《大道至简》有感(结束)
    super一些要点
    读《大道至简》有感(六)
    随机数数组 框图输出
    读《大道至简》有感(五)
    《需求工程》阅读笔记03
    《需求工程》阅读笔记01
    天明闹钟开发过程2
    《需求工程》阅读笔记02
    天明闹钟开发过程1
  • 原文地址:https://www.cnblogs.com/zhilu/p/16076241.html
Copyright © 2020-2023  润新知