JavaScript高级(二)
三个对象:
1.构造函数2.原型对象3.实例对象
三者关系小结:
1.构造函数:都是prototype属性,就是原型对象
2.实例对象:都是有_ _ proto _ _属性,也是原型对象
3.原型对象:具有constructor属性,也就是构造函数
注:两个对象同名不覆盖、不冲突
对象访问规则:
对象进行属性访问,先查找自身,如果没有再找__opsiodfoa__,并一直重复此过程
查找ob.pro中如果还没有结果为undefined
这种由多个-型组成的结构,称为原型链
原型链的终点为Object.prototype
简单的说:就是 沿原型链查找【】
构造函数的继承操作:
创建子类、同时继承父类
●使用构造函数进行集成时,属性和原型方法需要分别处理
继承父类属性:
xx.call(this)的部分是固定形式,后面的参数按需修改
还可以进行新的属性设置,而且新的属性设置和继承操作没有顺序要求
2.继承父类原型的方法
由于原型继承操作是通过覆盖方式实现的,导致xxx.prototype自身不具有constructor
为了避免问题,自己添加个constructor;属性即可
设置原型方法时,必须在继承操作之后设置,否则也会被覆盖,相对于没写
多态设置:
构造函数进行多态设置,只能进行覆盖设置,无法像class一样对父类功能进行扩展
…
观察class与构造函数的关系:
class操作的结果还是通过原型prototype进行处理的
只不过语法更简单
给内置对象添加功能的方式
内置方法的使用方式:
内置对象和我们之前的自定义对象设置方式相同,都是将方法设置在原型中
如果希望给内置对象设置新方法,设置在原型中即可
书写方式arr.xxx() 注:可读性更强
函数进阶内容: 【this可以复用】
1.函数的属性和方法(属性了解,使用方法重点)
2.函数的其它使用方式
●自调用函数(立即执行函数)
●回调函数
●闭包函数
●递归函数
2.函数方法
1.call()【用于调用函数,并设置本次掉用中的this】
●参数1:要设置的this值,对象结构
●后续参数:表示传入的实参,个数不限
书写方式:xx.类名.({},x,x,x)
2.apply()
apply用于调用函数,可以设置函数中的this
●参数1:用来设置函数中的this
●参数2:数组,用来保存实参
书写方式:xx.apply({},[]);
3.bind()
bind含义为绑定。
call和apply可以设置this,但都是临时设置,只有本次调用有效
如果 希望this长期被设置为某个对象,可以通过bind方法进行操作
●参数1:需要绑定的this、值,对象
●后续参数:需要绑定的实参值
●返回值:绑定了this或实参的函数副本
1 | function fun(a,b,c){ |
绑定this和实参用返回值(
后续参数:需要绑定实参值
返回值:绑定了this或实参的函数副本
数组借用Math方法
call 和apply区别:
call–传入实参是单个传入方式
apply–传入实参采用数组整体传入方式
函数的声明方式:
1.函数声明语句
2.函数表达式
两种声明方式的区别:
1.参与预解析时规则不同
2.函数声明语句对使用位置有一些要求(特殊环境不推荐使用)
自调用函数、立即执行函数
效果:在当前位置执行一次后结束
作用:
●将大功能分成小部分,每部分代码包裹一个自调用函数,可以形成独立的作用域
●可以避免多个功能的代码出现冲突(变量命名重复导致修改的问题)【多人开发时名称冲突的问题】
书写注意点:每个自调用函数后的分号,必须加,否则,多个自调用函数连起来书写会报错
1 | Eg:;(function(){ |