0
点赞
收藏
分享

微信扫一扫

Javascript进阶(未完)

云岭逸人 2022-03-27 阅读 23

目录

一.面向对象编程

1.面向过程编程POP
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。
2.面向对象编程OOP
1)面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。是以对象的功能来划分问题而不是步骤。
2)特性:封装性、继承性、多态性

二.类(ES6)

1.创建类和生成实例
类constructor构造函数,用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法,如果没有显示定义,类每部会自动创建一个constructor()。
2.类继承extends和super关键字
1)super关键字用于访问和调用对象父类上的函数,包括构造函数和普通函数。super.方法名(),必须在this之前调用,也就是先调用父亲的构造函数,再调用自己的。
2)继承中如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的
3)继承中如果子类里面没有,就去查找父亲有没有这个方法,如果有就执行父亲的这个方法(就近原则)
3.this的指向问题
1)constructor里面的this指向的是创建的实例对象
2)方法里面的this指向的是调用这个函数的实例对象,谁调用就指向谁

三.构造函数

1.构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new一起使用,可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
2.new在执行前会执行四件事:
(1)在内存中创建一个新的空对象;
(2)让this指向这个新的对象;
(3)执行构造函数里面的代码,给这个新对象添加属性和方法;
(4)返回这个新的对象(所以构造函数里面不需要return)
3.构造函数可以添加一些成员,可以在构造函数本身上添加(静态成员),也可以在构造函数内部的this上添加(实例成员)
(1)静态成员:只能通过构造函数本身来访问;
(2)实例成员:只能通过实例化的对象来访问。
存在的问题:占用太多的存储空间
4.构造函数原型prototype
构造函数通过原型分配的函数是所有对象所共享的。每一个函数都有一个prototype属性,指向另一个对象。这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。因此可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
5.对象原型__proto__
对象都有一个属性__proto__指向构造函数的prototype原型对象,对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在。
(1)方法的查找规则:首先看创建的对象实例上是否有方法,如果有就这姓这个对象上的方法,如果没有,因为有__proto__属性,就去构造函数对象prototype身上去查找。
6.原型constructor构造函数
对象原型__proto__和构造函数prototype原型对象中都有一个属性constructor,constructor主要用于记录该对象引用于哪个构造函数,可以让原型对象重新指向原来的构造函数。
注意:如果给prototype直接进行赋值会覆盖prototype原来的属性,原来的constructor就不能正确的指向构造函数,需要在prototype中手动添加constructor的指向。
7.构造函数、实例、原型对象之间的关系
三者关系图
8.简单原型链
(1)只要是对象就有__proto__原型,指向原型对象
(2)自己创建的原型对象里面的__proto__原型指向的是Object.prototype
(3)Object.prototype原型对象里面的__proto__原型指向为null
在这里插入图片描述
9.JS的成员查找机制
(1)当访问一个对象的属性(包括方法)时,首先找这个对象自身有没有该属性;
(2)如果没有就查找它的原型(就是__proto__指向的prototype原型对象);
(3)如果还没有就查找原型对象的原型(Object的原型对象);
(4)依此类推一直找到Object为止(null)
(5)__proto__对象原型的意义在于为对象成员查找机制提供一个方向,或者说一条线路
10.原型this指向问题:在构造函数中,里面的this指向的是对象实例,在原型对象中,this指向的也是对象实例,也就是谁调用就指向谁。
11.扩展内置对象
通过原型对象,对原来的内置对象尽心扩展自定义的方法,比如给数组自定义求和功能。
注意:数组和字符串内置对象不能给原型对象覆盖操作Array.prototype = {},因为会覆盖掉原来的对象,只能是Array。prototype.xxx = function(){}的方式。

四.继承

1.call方法:fun.call(thisArg,arg1,arg2...)
(1)call()可以调用函数。调用fun这个函数,fun.call()
(2)修改函数里面的this指向。fun.call(o,x,y),原先是谁调用this就指向谁,现在指定了this指向的是o这个对象,x,y是实参,与原函数fun的形参相对应。
2.借用父构造函数继承属性(ES6之前),调用父构造函数的时候,要指向子构造函数的对象实例,Father.call(this,x,y),这里的this指的是儿子,因为是在Son里面进行调用。

举报

相关推荐

0 条评论