我是 node.js 的新手,但写了很多年的 Javascript,我偶然发现了一个我不明白的模式:Flag
sets a modifier
在对象上。
比如这里socket.io docs :
Flag: 'broadcast'
Sets a modifier for a subsequent event emission that the event data will only be broadcast to every sockets but the sender.
var io = require('socket.io')();
io.on('connection', function(socket){
socket.broadcast.emit('an event', { some: 'data' }); // everyone gets it but the sender
});
这里 socket
是一个对象,broadcast
是该对象的属性,而 socket.broadcast
是带有修饰符的同一个对象设置?!
访问对象的属性怎么可能返回对象本身?
这是我多年来一直忽略的 Javascript 特性吗?或者这是我不知道的 ES6 的一些新功能?或者这是特定于 Node 的编码模式?
它是如何工作的/它是如何实现的?
编辑:即使 other question与文档中的摘录大致相同,但有很大不同。我的问题是关于 Javascript 的背景,而另一个问题是关于文档中的措辞。由于这个原因,答案也大相径庭。
最佳答案
我看到了您的问题并且很感兴趣,所以查看了 socket.io
源代码。
可以看到标志逻辑here .
flags.forEach(function(flag){
Object.defineProperty(Socket.prototype, flag, {
get: function() {
this.flags[flag] = true;
return this;
}
});
});
它正在使用 descriptor定义一个属性 getter,它在内部设置标志并返回对象实例。
有趣的东西。
关于javascript - 在 Javascript 中,属性如何修改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42663058/