首页 > 其他分享 >前端必须掌握的JS面向对象

前端必须掌握的JS面向对象

时间:2023-02-01 11:35:38浏览次数:47  
标签:console log val 对象 前端 JS 面向对象 demo1 Fn

前端必须掌握的JS面向对象_面向过程

面向对象和面向过程区别

面向对象是把构成问题的事物拆解为各个对象,来描述这个事物在当前问题中的行为,而不是为了实现某个步骤。
面向过程,是分析出实现问题的每个步骤,然后编写函数,并依次调用。

面向对象特点

  • 封装 让使用的人不考虑内部实现,只考虑功能使用,把内部代码保护起来,提供api接口让用户调用
  • 继承 从父类继承出一些方法和属性,利于代码复用
  • 多态 不同对象作用于同一操作产生不能效果

JS三大对象

  • 宿主对象
  1. 所有非本地对象都属于宿主对象
  2. 所有DOM和BOM对象都属于宿主对象
  3. 嵌入到网页的JS来说,宿主对象就是浏览器提供的,比如:Window和Documnet等
  • 本地对象
  1. 包括:Object、Array、Date、RegExp、Boolean、Number、String
  2. 这些引用类型在运行过程中需要通过new来创建所需的实例对象
  • 内置对象
  1. 是本地对象的子集
  2. 在ECMAScript程序开始执行前就存在,本身就是实例化内置对象,开发者无需再实例化
  3. 内置独享有Global、Math

创建对象

1.普通方式
缺点:无法识别对象类型

function createObject() {
const Player = new Object();
Player.color = "white";
Player.start = function () {
console.log("走这里了吗");
};
return Player;
}
const red = createObject();
console.log(red)
//{color: "white", start: ƒ}
console.log(red.constructor)
//无法识别对象类型
//ƒ Object() { [native code] }

constructor为构造函数的原型上的所特有属性,不可枚举,它有两个作用:
1.判断数据类型
2.对象实例通过constructor对象访问它的构造函数
如果创建一个对象来改变它的原型,constructor就不能判断数据类型

function fn(){}
fn.prototype = new Array();
var f = fn();
console.log(f.constructor===fn)//false
console.log(f.constructor===Array)//true

2. 构造函数/创建实例
通过this添加的对象和属性都指向当前对象,所以在实例化的时候,通过this添加的方法和属性都会在内存中复制一份。
优点:改变某一实例对象的方法或者属性,不影响其他的实例对象
缺点:每生成一个实例,构造函数内部方法和属性都会重新开辟一份空间

Player(val) {
this.color = val;
this.start = function () {
console.log("走这里了吗 ");
};
}
const demo1 = new Player('red');
const demo2 = new Player('white');
console.log(demo1)
//Player {color: "red", start: ƒ}
console.log(demo1.constructor)
//ƒ Player(val) {
// this.color = val;
// this.start = function () {
// console.log("走这里了吗 ");
// };
// }

demo1和demo2占据不同的内存空间,事实证明demo1.start != demo2.start
3. 原型
通过原型继承的方法和属性并不是自身的,需要通过原型链一层一层的查找。
优点:在内存中​​创建一次​​,实例化对象都会指向prototype对象;通过实例创建的方法和属性不会开辟新的空间,可以​​判断实例的类型​​ 缺点:共享一份原型

function Fn(val){
this.color = val
}
Fn.prototype.start = function(){
console.log(val)
}
const demo1 = new Fn('white')
const demo2 = new Fn('red')
conslole.log(Fn.prototype)
//{start: ƒ, constructor: ƒ}
conslole.log(demo1.constructor)
// ƒ Player(val) {
// this.color = val;
// }
console.log(demo1.constructor===demo2.constructor)//true
console.log(demo1.strat===demo2.start)//true

4. 实例成员、静态成员
构造函数中可以添加一些成员,可以在构造函数本身上添加(静态成员),也可以通过构造函数内部的 this 添加(实例成员)
绑定在构造函数上的属性方法,需要通过构造函数来访问

function Fn(val){
if(!Fn.num) Fn.num=0
Fn.num++;
this.color = val;
}
let demo1 = new Fn('red')
console.log(Fn.num)//1
let demo2 = new Fn('blue')
console.log(Fn.num)//2
console.log(demo1.num)//undefined
console.log(demo1.color)//red

标签:console,log,val,对象,前端,JS,面向对象,demo1,Fn
From: https://blog.51cto.com/u_15885506/6030976

相关文章

  • xml解析_Jsoup_根据选择器查询、根据Xpath查询
    xml解析_Jsoup_根据选择器查询快捷查询方式:selector:选择器使用的方法:Elements select(String cssQuery)语法:参考Selector类中定义的语法......
  • 面向对象-参数和返回值
    面向对象-参数和返回值类名作为参数和返回值方法的形参是类名,就是需要该类的对象.方法的返回值是类名,就是返回一个该类的对象.//猫类publicclassCat{publ......
  • jQuery对象和JS对象区别与转换 jQuery事件绑定&入口函数&样式控制
    jQuery对象和JS对象区别与转换  JQuery对象和JS对象区别与转换1.JQuery对象在操作时,更加方便。2.JQuery对象和js对象方法不通用的.3.两者相互转换......
  • ASP.NET 前端大文件上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传......
  • SpringBoot 前端大文件上传
    ​ 最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的......
  • 669~670 xml的Jsoup快速入门 AND xml解析Jsoup对象
    Jsoup:jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOMCSS以及类似于jQuery的操作方法来取出和操作数据但是用来......
  • 半个前端新手入门Electron的过程
    前言先说几句废话,本人是一名web后端开发,主语言是java,在学Electron之前,只会一点点HTML和JavaScript。本文讲的也是我学习Electron的过程,而非教程,请酌情参考。Ele......
  • python selenium之JS滚动条处理
    在网页当中,页面存在滚动条,而你要操作的元素在当前屏幕可见区域之外。那么需要使用滚动条滚动到该元素处,然后再操作它。selenium当中的使用execute_script方法执行js语句来......
  • xml解析_Jsoup_Document对象、Element对象
    xml解析_Jsoup_Document对象Document:文档对象。代表内存中的dom树获取Element对象getElementByid(String id):根据id属性值获取唯一的element对象g......
  • jsDOM操作之获取元素
    1 根据id名获取document.getElementById(idName)2根据标签名获取document.getElementsByTagName(tagName)//返回一个集合(类数组对象)从整个文档获取element.getElem......