在JavaScript中,接收器是一个对象,用于接收和处理从其他对象发送过来的消息或数据。接收器可以是函数、方法或对象。它通常用于实现事件处理、回调函数或消息传递等功能。接收器可以通过调用函数、调用方法或访问对象的属性来处理接收到的消息或数据。
在JavaScript中,接收器是一个对象,用于接收和处理从其他对象发送过来的消息或数据。接收器可以是函数、方法或对象。它通常用于实现事件处理、回调函数或消息传递等功能。接收器可以通过调用函数、调用方法或访问对象的属性来处理接收到的消息或数据。
我正在阅读《You Don't Know JS: ES6 & Beyond》,发现一些用词不清晰的地方,比如:
我们在处理器对象(作为`Proxy(..)`的第二个参数)中声明了一个名为`get(..)`的处理器,它接收到了目标对象(`obj`)、键属性名(`"a"`)和self/receiver/proxy(`pobj`)的引用。
我的问题是,上面的“receiver”是什么意思,它的名称从哪里来?看起来好像如果我有一个名为“a”的对象,其中有一个成员函数“jump”:
var a = { jump: function() { console.log('jump!'); } };
如果我运行a.jump();
,那么“a”就是receiver。是这样工作的吗?
对于阅读同一本书的人:当你到达Proxy First, Proxy Last一节时,你可以在代码中添加一行来更清楚地了解“get”陷阱中的上下文:
var handlers = { get(target, key, context) { console.log(greeter === context); //true, this line added return function() { context.speak(key + "!"); }; } }, catchall = new Proxy({}, handlers), var greeter = { speak(who = "someone") { console.log("hello", who); } }; // setup `greeter` to fall back to `catchall` Object.setPrototypeOf(greeter, catchall); greeter.speak(); // hello someone greeter.speak("world"); // hello world greeter.everyone(); // hello everyone!
正如你所看到的,由于“get”陷阱中第三个参数“context”的命名,接收者可以根据词法代码的不同而变化 —— greeter.everyone();
。为了更好地理解,请参考下面Oriol的非常详细的答案。