跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 使用 call()方法调用函数 和 将作用域 this 直接作参数传入有什么区别?
未分類
31 5 月 2020

使用 call()方法调用函数 和 将作用域 this 直接作参数传入有什么区别?

使用 call()方法调用函数 和 将作用域 this 直接作参数传入有什么区别?

資深大佬 : gromit1337 0

小程序里的一个封装方法需要调用页面的组件, 要用到 this.selectComponent().doThing() ,这里引起了标题的争议了
大佬有話說 (17)

  • 主 資深大佬 : gromit1337

    感觉用 call 少了个参数,少了些思想负担

  • 資深大佬 : liuy1994g

    this 和参数还是有些区别的吧

  • 資深大佬 : rabbbit

    面向对象编程和函数式编程?

  • 資深大佬 : ChanKc

    没有太看懂
    this.selectComponent()和 selectComponent.call(this)的差别?
    在你的情况下似乎没区别
    call 一般都发生在,如果你要调的这个方法,你担心没有
    比如你的 this.selectComponent == null
    此时你只能去找别的类似的对象的方法拿过来用一下
    that.selectComponent.call(this)

    示例:
    let obj = Object.create(null);
    obj.a = 1;
    Object.prototype.hasOwnProperty.call(obj,”a”); // true

  • 資深大佬 : ChanKc

    想了想你可能要的是这个
    你的 selectComponent 只是临时用一下,比如
    let obj = {};
    obj.selectComponent = function () { console.log(“s”) };
    obj.selectComponent();
    delete obj.selectComponent;

    如果是这样,用 call
    (function selectComponent () {}).call(obj);

    前者可能会覆盖已有的同名方法,而且可能忘记 delete 从而影响 Object.keys 等方法的结果。call 没有那么地“侵入性”

  • 資深大佬 : ChanKc

    还是说你问的是
    func sum(self) {return self.a + self.b };
    func sum() { return this.a + this.b };
    的区别?我个人喜欢前者

  • 資深大佬 : longjiahui

    如果不是某个类对象或啥有意义的 this,感觉通过参数传会比较好。
    不然 要搞清楚这个 this 会慢慢变得复杂

  • 主 資深大佬 : gromit1337

    @ChanKc #6 大概是你这两个的区别,下面的方法用 call 调用

  • 資深大佬 : Austaras

    这两个都不好, 用 arrow function

  • 資深大佬 : pvgjfk

    在功能性上没啥区别,都能实现你的目的.

  • 資深大佬 : pvgjfk

    忘了说了,如果你是我同事你这样写会被我骂的 [狗头]

  • 資深大佬 : autoxbc

    this 本质上就是隐式传参数,隐式的目的是写起来简洁优雅,不简洁不优雅反而烧脑的用法都是错的,背离了设计初衷

  • 資深大佬 : ChanKc

    @gromit1337 没啥区别,但是如果是 typescript,涉及到 private 的话,#6 上面那个是不行的

  • 資深大佬 : ChanKc

    @autoxbc this 不是 js 里最烧脑的东西之一吗

  • 主 資深大佬 : gromit1337

    @pvgjfk #11 为什么 /doge

  • 資深大佬 : autoxbc

    @ChanKc #14
    this 没有解决任何重要的问题,只是隐式传参的语法糖。当语法糖吃起来苦时,就是本末倒置了。那些试图用 this 炫技的人,其实不理解这个东西

  • 資深大佬 : ChanKc

    @autoxbc 没太懂,什么是拿 this 炫技?如果不懂 this 又怎么拿 this 炫技?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具