js apply call bind 改变 this指向 案例

js 专栏收录该内容
12 篇文章 0 订阅

apply call bind 改变 this指向,参数非必填。参数空,或者thisObj写入null,this指向window

  • apply
    参数: (thisObj,array);
    修改this指向thisObj,原函数的参数封装到数组中传递。
    函数.apply(null,[1,2])
  • call
    参数: (thisObj,…*);
    修改this指向thisObj,原函数的参数已可变参数传递。
    函数.call (null,1,2)
  • bind
    {T} thisArg
    {… * } arg
    return {function(this:T)}
    Function.prototype.bind=function(thisArg,arg){}
    参数: (thisObj,…*);
    修改this指向thisObj,原函数的参数已可变参数传递。
    函数.bind(null,1,2)
     function Flower(name){
     	this.name=name;
     }
     Flower.prototype.sayName=function (){
     	console.info(this.name);
     }

     function Peony(name){
     	Flower.call(this,name);
     }
     Peony.prototype = new Flower();

     function Azalea(name){
     	Flower.call(this,name);
     }
     Peony.prototype = new Flower();


     var f=new Peony("牡丹");
     var t=new Azalea("杜鹃");

     f.sayName(); // 牡丹
     f.sayName.apply(t); // 杜鹃
this.num = 888; // 变量,函数 默认指向 window
var module = {
  num : 888888,
  getNum: function() { console.info(this.num); }
};

module.getNum(); // 返回 888888

module.getNum.apply(window); // 返回 888
module.getNum.apply(null); // 返回 888
module.getNum.apply(); // 返回 888

// 考点
var viewNum = module.getNum;
viewNum(); // 888  函数调用省略了window,实际是 window.viewNum();

var reviewNum = viewNum.bind(module);
reviewNum(); // 返回 888888  .bind(module);将this指向修改为module
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值