call 和apply 区别是什么 ? 哪个性能更好一些?实现 (5).add(3).minus(2)使其输出结果为6

call和 apply 的区别?哪个性能更好一点?
// 通过 call和applu 抛出 原型 性能 测试 掌握 面试节奏
答:

  • 共性 :都是Function 原型上的方法,每一个函数 作为Function 的实例都可以调用这两个方法,而这两个方法都是用来让函数执行并且改变函数中this 指向的,

  • 异性: call 传参是一个个传递 而apply 把所有需要传递的参数以数组的形式保存起来

  • 拓展 bind ,并没有立即执行,而是预先把函数中的this 做了处理

  • 哪个性能更好

    • 当指定this 的时候在三个以及三个以内的参数 两种方法差不多 ,当超出三个的时候call 性能要好一点
      // jq 的作者也提过这个概念 所以后期开发的时候可以使用call多一点
      那么什么时候使用apply呢?
      我想把数组中的每一项都传过去的时候
      fn.apply(this,arr)
      或者 fn.call(this,...arr)
// fn.call(this, 10, 20, 30);
// fn.apply(this, [10, 20, 30]);
// fn.bind(this, 10, 20, 30)();

自己实现性能测试,结果仅供参考,因为任何的代码测试,都是和测试的环境有关系的 比如 cpu内存 gpu 等电脑当前性能 ,以及不同的浏览器等等*/

// -同步;
// console.time('a');
// //...执行的代码

// console.timeEnd('a');

实现 (5).add(3).minus(2)使其输出结果为6

// 考察范围 类和实例 以及在原型上构建方法,并且能够实现链式调用
// 每次函数 调用都要返回一个NUMBER类 的实例 也叫链式写法

(function() {
  // 容错处理
  function check(n) {
    n = Number(n);
    // 如果结果为true 说明是非有效数字
    return isNaN(n) ? 0 : n;
  }
  function add(n) {
    n = check(n);
    return this + n;
  }
  function minus(n) {
    return this - n;
  }
  //  jq 作者的做法 就是添加多个原型方法的时候的偷懒写法
  // ['add', 'minus'].forEach((item, index) => {
  //   Number.prototype[item] = eval(item);
  // });

  // 等同于
  Number.prototype.add = add;
  Number.prototype.minus = minus;
})();
// 等同于
~(function() {})();

你可能感兴趣的:(call 和apply 区别是什么 ? 哪个性能更好一些?实现 (5).add(3).minus(2)使其输出结果为6)