继承
原型继承
借用构造函数
实行结果:
组合继承
注解:
- 有两个定义类的构造函数
- 子类(构造函数中)借用构造函数调用父类构造器,在使用prototype定义父类(一定要设置constructor)
定义函数的方式
函数声明和函数表达式的区别
函数中的this
1.函数中的this window
2.方法中的this 调用方法的对象
3.构造函数中的this 通过构造函数创建的对象
4.事件处理中的this 触发事件的对象
5.定时器执行的function中的this window
改变this的方法
call,apply,bind(不调用函数,但改变内部的this)
ECMAScript规范为所有函数都包含两个方法(这两个方法非继承而来), call
和 apply
。这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内 this
的值 。
语法 |
定义 |
说明 |
call(thisObj,Object) |
调用一个对象的一个方法,以另一个对象替换当前对象。 |
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj |
apply(thisObj,[argArray]) |
应用某一对象的一个方法,用另一个对象替换当前对象。 |
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数 |
区别
- 参数不同, apply 传入的是一个参数数组,也就是将多个参数组合成一个参数数组, call 从第二个参数开始依次传入.
- apply 可以直接将当前函数的arguments对象作为apply的第二个参数传入
call 和 apply 最大的好处:方便我们解耦,对象不需要和方法有任何的耦合性,能使我们写出更好的面相对象程序。
Apply:
让数组的每一项做为方法的参数
在伪数组使用数组的方法
对象内部使用定时器的this
setInterval(function(){}.bind(obj),150)
事件处理函数中的this
Btn.onclick = function (){}.bind(obj);
函数对象的成员
函数做为参数
函数作为返回值