`$this` 的这两种用法有何不同?

Posted

技术标签:

【中文标题】`$this` 的这两种用法有何不同?【英文标题】:How are these 2 uses of `$this` different? 【发布时间】:2020-09-15 01:18:34 【问题描述】:

我目前正在研究一些 AngularJS 代码,我注意到 $this 在 AngularJS 工厂的定义中有两种不同的用法:

module.factory('f_sys', function(...) 
  var $this =  data :  id: "123"  ;

  ...

  function _updateSystem(d) 
    return $this.data.id == "123";  // (true)
  

  $this.init = function() 
    ...
  

  ...

  return $this;
);

这里发生了什么? init 函数是否被添加为 var $this 对象的另一个键?它是否像另一个函数一样被处理(例如_updateSystem)?

【问题讨论】:

如果没有看到您的代码的完整版本,我们无法真正回答这个问题。在省略的部分中,$this 显然发生了一些事情。 【参考方案1】:

init 不像其他函数。就像你说的:它成为$this 对象的属性。所以你可以打电话给$this.init(),但是打电话给_updateSystem你不能写$this._updateSystem()。当您将$this 返回给调用者时,调用者可以调用init(),但不能调用_updateSystem()

$this 的构造与您将其写在一个作业中一样:

var $this =  
    data:  
        id: "123" 
    , 
    init: function() 
        /* ... */
    

或者使用更现代的 (ES6) 语法:

const $this =  
    data:  
        id: "123" 
    , 
    init() 
        /* ... */
    

【讨论】:

以上是关于`$this` 的这两种用法有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

主方法中的 String[] args 与 String... args 有何不同?

iloc 和 loc 有何不同?

大开测试:性能- 基于目标和手动场景测试有何联系和不同(连载20)

大开测试:性能- 基于目标和手动场景测试有何联系和不同(连载20)

Python 和 JavaScript 之间的语义有何不同?

ggplot2 密度与密度函数有何不同?