js原型和作用域等相关
原型
js中每个对象都有一个原型(prototype)。它定义了对象的基本属性和方法。通过原型,对象可以继承另一个对象的属性和方法。
原型链
基于原型对象的继承使得不同构造函数的原型对象关联在一起,并且这种关联关系是一种链状的结构,这种原型对象的链状结构关系称为原型链。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 会沿着原型链向上查找,直到找到匹配的属性或方法或者到达原型链的顶端(通常是 Object.prototype)。 原型链查找规则
- 当访问一个实例对象的属性和方法时,先判断这个对象本身有没有该属性和方法
- 如果没有就查找它的原型(也就是__proto__指向的原型对象prototype)
- 如果还没有就查找原型对象的原型
- 以此类推一直找到null为止
- __proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
实现原型继承:1、通过原型来继承构造函数 2、 将constructor指向原来的构造函数
js原型运用场景
- 继承 通过原型,可以实现对象之间的继承关系。子对象的原型链会指向父对象的原型,从而实现属性和方法的共享。
- 原型链 原型链是 JavaScript 中实现继承的机制,通过原型链,对象可以沿着原型链访问其原型上的属性和方法。
- 原型方法 将方法添加到对象的原型上,可以使得所有通过该原型创建的实例都能够共享这些方法,提高代码的复用性。 如将全局事件总线挂载到全局时,Vue.prototype.$bus = Bus
- 性能优化 在 JavaScript 中,每个对象通过原型链访问属性和方法,而不是直接在对象上定义,这有助于减少内存占用和提高代码执行效率。
- 动态性 可以在运行时动态地修改原型对象,添加、修改或删除原型上的属性和方法,从而影响通过该原型创建的所有实例。
闭包
一个函数对于周围状态的引用捆绑在一起,这样的组合就是闭包 简单来说就是内层函数+外层函数的变量 使用场景:实现数据的私有,创建全局私有变量