美文网首页
JS继承的相关问题

JS继承的相关问题

作者: 晴天的晴q | 来源:发表于2019-02-27 16:30 被阅读0次

    构造函数、原型对象和实例之间的关系?

    每个构造函数都有一个 prototype 属性指向原型对象,原型对象中有一个 constructor 属性指向 prototype 属性所在的函数,实例中有一个内部属性 [[Prototype]] (可用__proto__访问)指向原型对象。

    ES6 extends 继承做了什么操作?

    1. 把子类构造函数的原型(__proto__)指向父类构造函数
    2. 把子类实例的原型对象(prototype)的原型(__proto__)指向了父类的原型对象(prototype)
    3. 子类构造函数继承了父类构造函数里的属性。使用 super 调用的(ES5 则用 call 或者 apply 调用传参)。

    如何设置 __proto__?

    new、Object.create 和 Object.setPrototypeOf 可以设置 __proto__。

    new 一个对象做了什么?

    1. 创建了一个全新的对象
    2. 这个对象继承了该构造函数的原型(即__proto__)
    3. 构造函数中的 this 变量引用新创建的这个对象
    4. 构造函数的属性和方法被加入到 this 引用的对象中
    5. 如果构造函数没有返回对象类型 Object(包含 Function、Array、Date、RegExg、Error),那么 new 表达式中的函数调用会自动返回这个新的对象

    Object.create(ES5 提供)

    Object.create(proto, [propertiesObject]) 方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。它接收两个参数:
    第一个参数是新创建对象的原型对象;
    第二个参数(可选),若没有指定即为 undefined。要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。

    Object.setPrototypeOf(ES6 提供)

    Object.setPrototypeOf() 方法设置一个指定的对象的原型(即内部 [[Prototype]]属性)到另一个对象或 null:Object.setPrototypeOf(obj, prototype)。

    相关文章

      网友评论

          本文标题:JS继承的相关问题

          本文链接:https://www.haomeiwen.com/subject/bcbvyqtx.html