gpt4 book ai didi

javascript - 在 Javascript 中,属性如何修改对象

转载 作者:行者123 更新时间:2023-11-30 09:37:44 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com