[英]Is it considered bad practice to change the value of __proto__ of an object?
[英]Is setting properties on the Window object considered bad practice?
我正在编写一个非常复杂的JavaScript应用程序,它具有MVC架构,我正在使用Prototype的Class
支持和Module模式实现。 该应用程序使用AJAX和Observer模式。 我在DOM加载时创建我的控制器实例,传递一个视图,一些模型是从JSON数据创建的,然后就可以了。
但是,我发现我必须将我的控制器实例设置为Window
对象的属性 - 即在不使用var
情况下声明它 - 因为我有一个AJAX成功回调,刷新控制器拥有的视图对象,此时在代码我漂亮的小MVC世界不在范围内。
我调查了将视图对象作为参数传递给包含AJAX代码的函数,但这非常混乱,并且会导致一些可怕的违反MVC模式的行为,例如耦合模型和视图。 这太可怕了。
是否正在将我的控制器实例直接存储在Window
认为是不好的形式? 它有点像对我使用全局变量,但我看不出任何方法。
在window对象上设置属性等同于创建全局变量。 也就是说,有时这样做是不可避免的,但是你应该尽量将它保持在最低限度,因为它最终会污染全局命名空间。
在您的情况下,创建单个属性并不是那么糟糕。 如果您想要格外小心,可以为需要全局访问的任何内容显式创建命名空间:
// In init:
var mynamespace = {};
. . .
// Once the controller is available:
var namespace = window.mynamespace;
namespace.controller = controller;
namespace.foo = bar; // Set other stuff here as well.
我会说这是不好的做法。 如果必须的话,您可以随时轻松地为应用程序创建命名空间并将全局变量放入其中。
当您想要调用事先未知名称的全局函数时,它们非常有用。
var funcName = "updateAns" + ansNum;
window[funcName]();
它们可以用于a)在大多数情况下避免邪恶的逃避。 b)避免对全局变量的引用错误。
如果未定义全局x,则x = x + 1
将生成参考错误。 window.x = window.x + 1
不会
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.