js面向对象(原型,es6 class)

本文深入探讨JavaScript中的面向对象编程,包括构造函数、原型和原型链的概念。通过实例解析了如何创建对象、利用原型解决方法冗余问题,以及new操作符的工作原理。同时,介绍了ES6中的class语法,强调了原型在内存管理和效率提升方面的作用。

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

保持对代码的热爱并保持怀疑态度

首先得知道一点:在js中万物皆对象 Everything is object
面向对象编程:就是以对象为主的编程
对象 -就是数据的打包

  • 数据的查找速度得到提升
  • 数据的传输速度得到提升

面向对象的三大设计思想
·面向对象分析(OOA):不断的将无法直接解决的大问题,拆分成可以直接解决的小问题
·面向对象设计(OOD):每个系统之间,需要有数据关联,但又没有功能依赖
·面向对象编程(OOP):
封装(忽略细节选择使用重复使用)
继承(相当于你有个父元素,然后子元素可以直接用父元素的值)
多态(多种形态的使用)

实例

//自定义构造函数的的名字的首字母就要大写,大驼峰的命名方式  例如 function  Fn(){}
 function Game(){
       return {name:"你"};
    }


    var f=new Game();   //new执行  如果没有传参()可以省略
    console.log(f);

new的原理:

  1. 创建了一个新对象
  2. 将函数内部的this,指向了这个新对象
  3. 将这个新对象的__proto__,指向改函数的prototype
  4. 原函数没有主动返回对象,那么返回new创建的对象

什么是原型和原型链
首先我们先来看一段代码

function fn(n,c){
    this.id = n;
    this.student = c;
    this.info = function(){
        console.log(`信息${this.id}${this.student}`);
    }
}
var f1 = new fn("1","你的名字");    //关键字new创建对象
console.log(f1);
f1.skill()    //调用函数中的方法

内置工厂模式(自定义构造函数)的不足

  • 多个实例的拥有多个相同方法,造成内存的冗余
  • 借助原型,解决方法冗余问题
  • prototype:原型对象(也叫显示原型),专属于函数,用来给将来new出来的实例,做公共空间使用
  • __proto__:原型链对象(隐式原型),每个对象都具有这个属性,他表示一个指向,用来指向自身的公共空间(new出自身的函数的prototype)
  • 对象的属性的读写规则:如:obj.name
    • 读:先在自身查找,找到了,使用,没找到,顺着__proto__向上层查找,找到了就使用,并停止查找,没找到,继续顺着__proto__查找,直到顶层,没有找到,抛出undefined
    • 写:先在自身查找,找到了,就赋值,没找到,就设置一个属性

最终语法

function Fn(n,c){
    this.id = n;
    this.student = c;
    this.skill();  //执行方法调用了绑定在原型身上的skill方法
}
// 类,接口    //公共的
Fn.prototype.skill = function(){
    console.log(`来自于${this.id}${this.student}`);
    this.info();   //执行方法info
}
Fn.prototype.info = function(){
    console.log(`信息${this.id}${this.student}`);
}
new Fn("1","你的名字");

也就是说函数中的可以拿到prototype并且直接执行如show() 
反之prototype里面也可以拿函数中的值,如this.name

es6 新增的 class

class原理也就是封装了原型。
语法

class Fn{    //命名
    constructor(){
        this.sex();    //方法执行
    }
    sex(){   //方法中具体的语句
		console.log("随啦啦啦");
    }
}
**千万千万别忘了new执行,我就是老忘记**
new Fn();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

划水的乌贼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值