返回

原型重构的知识总结

前端

面向对象编程中的原型重构

面向对象编程(OOP)是一种编程范式,它将数据和行为组织成对象,对象是一个独立的实体,它包含数据和操作数据的方法。在Javascript中,面向对象编程主要通过原型重构来实现。

原型重构是一种通过修改对象的原型来改变对象的行为的技术。在Javascript中,每个对象都有一个原型,原型是一个对象,它包含了该对象的所有属性和方法。当一个对象访问一个不存在的属性或方法时,Javascript会自动在对象的原型中查找该属性或方法。

原型重构可以通过多种方式进行,包括:

  • 使用Object.create()方法创建新对象
  • 使用Object.assign()方法复制对象
  • 使用__proto__属性修改对象的原型

原型重构的应用

原型重构是一种非常强大的技术,它可以用来实现多种不同的目的,包括:

  • 创建新的对象类型
  • 扩展现有对象类型
  • 修改对象的行为
  • 共享数据和方法

原型重构是Javascript中面向对象编程的基石,它是一种非常重要的技术,掌握原型重构可以帮助您在Javascript中编写更灵活、更可重用的代码。

面向对象练习题(原型重构的一些知识)

下面是一个面向对象练习题:

function Fn() {}
Fn.prototype.name = 'Jack'

const f1 = new Fn()

console.log(f1.constructor) // Object
console.log(f1.__proto__) // Fn.prototype
console.log(f1.__proto__.__proto__) // Object.prototype

请解释输出结果。

答案

输出结果如下:

Object
Fn.prototype
Object.prototype

输出结果表明,f1是一个Fn类型的对象,它的原型是Fn.prototype,Fn.prototype的原型是Object.prototype。

console.log(f1.constructor);输出的是Object函数,因为重写了Fn的原型,所以找不到const Fn。

在Javascript中,每个对象都有一个constructor属性,该属性指向该对象的构造函数。当一个对象访问一个不存在的属性或方法时,Javascript会自动在对象的原型中查找该属性或方法。如果在对象的原型中找不到该属性或方法,Javascript会继续在对象的原型链中查找,直到找到该属性或方法为止。

在本例中,f1是一个Fn类型的对象,它的原型是Fn.prototype,Fn.prototype的原型是Object.prototype。当f1访问一个不存在的属性或方法时,Javascript会自动在Fn.prototype中查找该属性或方法。如果在Fn.prototype中找不到该属性或方法,Javascript会继续在Object.prototype中查找,直到找到该属性或方法为止。

在Object.prototype中,有一个constructor属性,该属性指向Object函数。因此,console.log(f1.constructor);输出的是Object函数。