gpt4 book ai didi

javascript - 客户端应用程序的全局可变状态

转载 作者:行者123 更新时间:2023-11-30 17:12:35 25 4
gpt4 key购买 nike

这可能是一个非常笼统(也可能是幼稚)的问题。

据我所知,“客户端”应用程序(即在浏览器中运行的应用程序)的编程模型意味着有一个共享的可变对象——网页的 DOM——由javascript 程序。我见过的 Naive 应用程序由数十个 JS 回调组成,这些回调更新一个大型共享 DOM,

是否正确?现代 JS 框架如何管理它?他们如何实现数据隐藏

最佳答案

除非您依赖 window.open、iframe,或者允许您的应用程序跨越多个相互通信的窗口/选项卡(可能通过 postMessage 进行通信),否则您没有操作同一文档的其他选择:只有一个文档。

但是,并不是因为对单个文档进行操作,文档本身就不能划分为多个封装的协作模块。 Nicholas Zakas 在他的 Scalable JavaScript Application Architecture 中很好地揭示了这个概念。演示文稿。

一个模块应该被赋予它们操作文档的非常严格的部分。那是他们自己的小沙箱,他们不应该进入其他模块的沙箱。如果他们需要交流,他们会以非常解耦的方式进行(例如通过 Mediator )。

当今的大多数框架都依赖模型- View - Controller (MVC) 的客户端变体(通常称为 MV*/MVW)来实现该目标。我不会在这里详细介绍,但主要目标是将数据与 View (表示)分离,以及通常将 View 与在 Controller 对象中完成的用户操作处理分离。

直到最近,还没有真正的方法来强制封装。例如,不可能阻止 jQuery 插件外部的某些代码修改该插件生成的 DOM 结构。我们不得不依靠程序员的专业精神来确保他们不会触及插件的内部结构。

现在,使用 Web Components引入新概念的规范,例如 Shadow DOM ,真正的封装将能够发生。不幸的是,该规范尚未在浏览器中实现,但对我们来说幸运的是,Google 的 Polymer项目,可以将其视为 Web Components shim。

关于javascript - 客户端应用程序的全局可变状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699392/

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