谁能解释这个调用函数在这个方法中是如何工作的

时间:2018-04-24 05:12:17

标签: aurelia aurelia-framework

这里第31行 - > https://github.com/benib/aurelia-hammer/blob/master/src/hammer-press.js

this.callback.call(null, { hammerEvent: event });

有人可以解释这个hammerEvent对象如何映射回调用aurelia视图模型中的$ event对象吗?

3 个答案:

答案 0 :(得分:4)

  

有人可以解释这个hammerEvent对象如何映射回来   调用 aurelia视图模型中的 $ event 对象?

有一些事情要发生。

假设你在视图中使用它是这样的:

<div hammer-tap.call="handleTap($event)">
</div>
  1. 在编译hammer-tap属性时,aurelia-templating-binding将通过map the binding attributes的约定列表到正确的表达式。

  2. 根据您在syntax-interpreter中可以看到的.call惯例,它被翻译为CallExpression(位于aurelia-binding

    < / LI>
  3. 当编译完成并且在组件上调用bind()时,CallExpression sets a delegate on the target会调用callSource以及从目标获取的任何值(在您的示例:{ hammerEvent: event }

  4. 现在完全掩盖这一点有点棘手,因为Aurelia如何解决所有这一切的深度和递归,但是在某一行创建ListenerExpression createBinding由{{aurelia-templating)调用3 {}在ListenerExpression中,它基本上为相关元素添加了一个事件监听器。

    1. handleSwipe会使用正确的事件调用锤子的hammerjs方法。
    2. 我认为实际上并不是在这个特定场景中发生的事情,因为作者似乎使用.on的{​​{3}} .offhammerjs。因此实际上handleSwipe将该事件从常规事件侦听器传递给CallExpression

      1. 返回callSource.call将最终调用绑定到$event的函数,并传入从ListenerExpression收到的hammerjs(或set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) 的处理程序)早些时候。
      2. 希望这有点帮助。但正如你所看到的,它非常复杂:)

答案 1 :(得分:-1)

在Javascript函数中可以通过call方法调用,原因函数可以是变量。

var p = function(x)
{
    console.log('calling via Call method. arguments: ' + x);
}

现在,如果我想调用此函数,调用它的一种方法是使用如下的调用方法。

p.call(null,'test')

有关通话函数here的详细信息。

我认为通过锤子js inputHandlercomputeInputData

完成对象和地图的连接

https://hammerjs.github.io/dist/hammer.js

希望有所帮助!

答案 2 :(得分:-1)

Javascript提供了三种调用函数的方法

  1. 简单的方法,
  2. 假设你有一个功能

    function foo() {
    
    }
    

    您只需使用括号foo()

    来调用它
    1. 使用call
    2. Function.prototype方法

      好的,再次考虑foo功能

      但是这次你需要以不同的方式看待它,javascript中的每个函数也是一个对象,每个对象都有一个原型,然后可以有更多的功能和属性。因此,当您定义类似foo的函数时,它也会成为Function的对象,并为您提供另外两种方法来调用该函数,其中一种方法是call,它要求第一个参数为您要传递给函数的上下文或this然后以逗号分隔的参数列表。例如,您有一个具有属性firstNamelastName的用户对象,并且您希望具有对该用户说些什么的功能,您可以像这样定义函数

      function saySomething(something) {
       return "Hey " + this.firstName + " " + this.lastName} + " I wanted to say " + something
      }
      
      1. 使用apply
      2. Function.prototype方法

        call非常相似,除了不使用逗号分隔的args,您将传递一个数组。

        此处有更多相关内容https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function