工厂函数和Class类

本文介绍了JavaScript中的工厂函数和Class类。工厂函数用于创建独立实例,避免全局污染,但会占用内存。Class类是ES6的语法糖,底层依旧基于原型,支持继承。call、apply和bind是改变this指向的三种方式。类继承通过extends实现,初始化时优先使用子类属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂函数

将一系列的属性和方法封装成一个构造函数,使用的时候需要使用new关键字来调用构造函数,目的是为了得到一个独立的实例对象。

  • js里有内置的构造函数
var obj = new Object();
  1. 当使用new调用函数之后发生了什么?
  • 第一步在函数中创建一个对象
  • 第二步函数中的this指向该对象
  • 第三步把函数中的this返回出去
  • 第四步使用变量接收构造函数的返回值--实例对象
  1. 工厂函数优势
  • 独立的作用域,不会污染全局
  • 实例出来的对象都是互相独立,互不影响的
  1. 工厂函数的缺点
  • 每次实例化都会在内存中开一个新的对象存储,如果大量实例化会占用内容

对象,原型,原型链和构造函数之间的关系

  1. 对象就是使用构造函数new出来的。
  2. 原型是构造函数的prototype对象,这里只有function函数才有原型对象。基于它可以实现对象的继承。
  3. 原型链指的是实例对象的自身的__proto__对象,__proto__指向的是构造函数的prototype对象,当我们使用对象点一个属性的时候,这个查找属性的过程称为原型链,程序会沿着对象的__proto__对象一直找的过程叫原型链。
  4. 构造函数是new的函数,也是实例对象的__proto__下面的constructor【构造函数】

改变this指向的三种方式

【注意】修改this指向的函数,必须是function函数,因为这些方法来自于prototype对象上的,而箭头函数没有原型对象,所以箭头函数不能改变this

call

  1. 第一个参数是对象,后面的参数都是独立传入的
  2. 一旦使用则会立即调用函数

apply

  1. 第一个参数是对象,后面的参数放在数组里
  2. 一旦使用则会立即调用函数

bind【es6】

  1. 第一个参数是对象,后面的参数可以是任意
  2. 不会立即调用函数,而是返回一个修改了this之后的新函数

class类【es6】

  • 类的概念:基于面向对象的概念实现的封装。特点是:封装,多态,继承。
  • class类是原型函数的语法糖

类的底层原理

  • es6的类还是基于函数的prototype封装的,它只是工厂函数的语法糖,其底层还是基于函数的封装
  • 因为是基于prototype对象实现的class,在严格意义上它属于伪类

类的继承

对象,原型,原型链和构造函数之间的关系

改变this指向的三种方式

【注意】修改this指向的函数,必须是function函数,因为这些方法来自于prototype对象上的,而箭头函数没有原型对象,所以箭头函数不能改变this

call

apply

bind【es6】

class类【es6】

类的底层原理

类的继承

  • 子类继承于父类使用关键字extends
  • 当使用new来调用子类的时候,程序会先从子类自身初始化所有的属性和方法,其次才沿着原型对象找到父类获取父类的属性和方法,如果父类和子类都有相同的属性或方法则使用子类的替代父类的。

    工厂函数和class类

    工厂函数

    将一系列的属性和方法封装成一个构造函数,使用的时候需要使用new关键字来调用构造函数,目的是为了得到一个独立的实例对象。

  • js里有内置的构造函数
  • var obj = new Object();
  • 当使用new调用函数之后发生了什么?
  • 第一步在函数中创建一个对象
  • 第二步函数中的this指向该对象
  • 第三步把函数中的this返回出去
  • 第四步使用变量接收构造函数的返回值--实例对象
  • 工厂函数优势
  • 独立的作用域,不会污染全局
  • 实例出来的对象都是互相独立,互不影响的
  • 工厂函数的缺点
  • 每次实例化都会在内存中开一个新的对象存储,如果大量实例化会占用内容
  • 对象就是使用构造函数new出来的。
  • 原型是构造函数的prototype对象,这里只有function函数才有原型对象。基于它可以实现对象的继承。
  • 原型链指的是实例对象的自身的__proto__对象,__proto__指向的是构造函数的prototype对象,当我们使用对象点一个属性的时候,这个查找属性的过程称为原型链,程序会沿着对象的__proto__对象一直找的过程叫原型链。
  • 构造函数是new的函数,也是实例对象的__proto__下面的constructor【构造函数】
  • 第一个参数是对象,后面的参数都是独立传入的
  • 一旦使用则会立即调用函数
  • 第一个参数是对象,后面的参数放在数组里
  • 一旦使用则会立即调用函数
  • 第一个参数是对象,后面的参数可以是任意
  • 不会立即调用函数,而是返回一个修改了this之后的新函数
  • 类的概念:基于面向对象的概念实现的封装。特点是:封装,多态,继承。
  • class类是原型函数的语法糖
  • es6的类还是基于函数的prototype封装的,它只是工厂函数的语法糖,其底层还是基于函数的封装
  • 因为是基于prototype对象实现的class,在严格意义上它属于伪类
  • 子类继承于父类使用关键字extends
  • 当使用new来调用子类的时候,程序会先从子类自身初始化所有的属性和方法,其次才沿着原型对象找到父类获取父类的属性和方法,如果父类和子类都有相同的属性或方法则使用子类的替代父类的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pinia-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值