• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
陆二陆
网站前端、手机前端
博客园    首页    新随笔       管理     
call&apply&bind详解

1.都是用来改变函数的this对象指向的
2.第一个参数都是this要指向的对象
3.都可以利用后入参数传参

应用

基本使用
var xw = {
    name:'小王',
    gender: '男',
    age: 24,
    say(){
        console.log(`${this.name},${this.gender},今年${this.age}`);
    }
}
var xh = {
    name:'小红',
    gender: '女',
    age: 18
}
xw.say()

肯定是小王, 男,今年24

xw.say.call(xh);
或
xw.say.apply(xh);
或
xw.say.bind(xh)();

显示是小红,女,今年18

call,appl都是对函数的调用,而bind方法返回的仍然是个函数,因此后面需要()才可以调用

var xw = {
    name:'小王',
    gender: '男',
    age: 24,
    say(school,grade){
        console.log(`${this.name},${this.gender},今年${this.age};在${school}上${grade}`);
    }
}
var xh = {
    name:'小红',
    gender: '女',
    age: 18
}
xw.say()

显示的是小王,男,今年24;在undefined上undefined

xw.say.apply(xh,['单县五中','高一']);
或
xw.say.call(xh,'单县五中','高二');
或
xw.say.bind(xh,'单县五中','高三')();
或
xw.say.bind(xh)('单县五中','高四');

显示的是

小红,女,今年18;在单县五中上高一

小红,女,今年18;在单县五中上高二

小红,女,今年18;在单县五中上高三

call后面的参数与say方法中是一一对应的
而apply后面是个数组,数组中的方法与say方法参数一一对应
bind返回的仍然是个函数,所以可以在调用时候在传参

求数组最大值&最小值--Math中的max/min方法实现(通过apply)

var arr = [23, 34, 24, 12, 35, 36, 14, 25];
Array.prototype.max = function(){
    return Math.max.apply({},this);
}
Array.prototype.min = function(){
    return Math.min.apply({},this);
}
arr.max();
arr.min();
其他取最大值&最小值方法
排序再取值法
假设法
var arr = [23, 34, 24, 12, 35, 36, 14, 25];
arr.sort((a, b) => a-b);
var min = arr[0];
var max = arr[arr.length - 1];
console.log(min, max);
var arr = [23, 34, 24, 12, 35, 36, 14, 25];
var max = arr[0], min = arr[0];
for (var i = 1; i < arr.length; i++) {
    var cur = arr[i];
    cur > max ? max = cur : null;
    cur < min ? min = cur : null;
}
console.log(min, max);
posted on 2018-07-26 22:36  陆二陆  阅读(128)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3