JS继承的相关问题

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

每个构造函数都有一个 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)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容