this的指向
一、js中的this
this的理解:可以把this理解成一个指针 ,指向谁,this就等价谁。
1、当直接使用this时,和在全局函数中使用this,this指向window
2、在绑定事件中使用this,this指向被绑定事件的对象(this指向事件源) 3、在对象方法中使用this,this指向对象本身
二、改变this的指向
在JS中,为了使编程更灵活,高效,定义了以下几种方法来改变this的指向。为了让B对象能使用A对象中的方法,可以使用call,apply、bind、等来完成。
2.1call方法: call方法有两个或多个参数,第一个参数为this指向的对象(也就是this的指向被改变),其他为传递的实参
2.2apply方法
apply方法功能和call一样。不同在于有多个参数时,apply方法使用数组来存储参数。
2.3bind方法
bind方法和call很类似,不同之处bind方法不立即执行,需要调用在执行。
三、apply,call,bind总结:
1、apply,call,bind三个都是用来改变this的指向的,第一个参数都是this要指向对象。
2、call、bind传递参数列表,apply使用数组传递参数 3、call、apply是立即调用,bind返回一个函数,需要调用后执行
4、call、apply、bind、第一个参数时null或者window,this指向window
例:
// An highlighted block
function Person(name){
this.name = name;
this.friends = ["范冰冰","李冰冰"];
}
function Student(sname){
//借用父类构造函数实现属性继承
Person.call(this,sname);
this.school = "哈哈哈哈哈哈哈";
}
//利用原型链实现继承
Student.prototype = new Person();
var student01 = new Student("变迁");
对Person.call(this,sname)的理解:
call实现对函数的借用。this指向的为实例对象,因此上面的代码可以理解为student01对象借用了Person()函数,即student01.Person(),因此当Person函数中的代码执行完毕后,即为student01对象下添加了name和friends属性。
总结:组合继承融合了原型链继承与借用构造函数的优点,成为目前JavaScript中最常用的继承模式。另外,还有原型式继承、寄生式继承、寄生组合式继承等。