发布于 

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
2
3
4
5
6
7
8
9
function fun(a,b,c){
consloe.log(this);
consloe.log(a,b,c);
}
//调用bind后,需要对返回的函数副本进行操作
var f1 = fun.bind({name:'啥啥啥'});
f1();
f1.call({})
//绑定的实参如果与形参个数不同,进行调用时的传入方式也不一样

绑定this和实参用返回值(

后续参数:需要绑定实参值

返回值:绑定了this或实参的函数副本

数组借用Math方法


call 和apply区别:

call–传入实参是单个传入方式

apply–传入实参采用数组整体传入方式

函数的声明方式:

1.函数声明语句

2.函数表达式

两种声明方式的区别:

1.参与预解析时规则不同

2.函数声明语句对使用位置有一些要求(特殊环境不推荐使用)

  • 不推荐在if语句中进行函数声明语句的设置(不同浏览器对这个操作的域解析结果不同)

    自调用函数

自调用函数、立即执行函数

效果:在当前位置执行一次后结束

作用:

●将大功能分成小部分,每部分代码包裹一个自调用函数,可以形成独立的作用域

●可以避免多个功能的代码出现冲突(变量命名重复导致修改的问题)【多人开发时名称冲突的问题】

书写注意点:每个自调用函数后的分号,必须加,否则,多个自调用函数连起来书写会报错

1
2
3
Eg:;(function(){

})();

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。