有关this指向的问题详解

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

例:

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中最常用的继承模式。另外,还有原型式继承、寄生式继承、寄生组合式继承等。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值