我正在开发这个web应用程序,它已经有了一种机制,允许开发人员定义服务器端的JavaScript函数,然后由其他服务器端的JS代码调用。
有两种方法来定义这些函数。
这边..。
function iAmFunctionA(arg) {
...some code...
}
function iAmFunctionB(arg) {
...some other code...
}
...and通过一个选项将函数封装在一个单独的对象中(我认为这是因为web应用程序嵌入了Prototype.js ).
var iAmAClass = Class.create();
iAmAClass.prototype = {
iAmFunctionA: function(arg) {
...some code...
},
iAmFunctionB: function(arg) {
...some other code...
},
type: 'iAmAClass'
}
后一种类型随后由其他服务器端JS调用,如下所示:
var a = new iAmAClass();
var someRetVal = iAmAClass.iAmFunctionA(arg);
我想问的问题是:在一个对象中封装JavaScript有什么实际好处(S)吗?如果有,那会是什么?
发布于 2015-12-02 21:49:43
我认为这实际上是在尝试将面向对象的思想引入JavaScript。您的代码类似于这个示例: HTML中的创建面向对象的JavaScript类构造器。
面向对象编程是一种组织技术。如果您有一个用户数据结构,它可能有以下字段:
firstName
lastName
age
您可能有一些与用户一起工作的函数,
createUser()
deleteUser()
changeFirstName()
addUserToCompany()
你可以随心所欲地抛出所有这些东西,或者把所有与用户相关的数据和函数放在一个地方--一个用户类。也许最后一个addUserToCompany()
函数更属于Company类,而不是User类。这不是一个完美的系统。但是,您不应该在任何地方查找该函数,而只需查找User和Company类,因此至少它缩小了您明智地查找事物的范围。
封装通常意味着(粗略地)“隐藏”。你隐藏一些东西来限制它们的使用方式。如果某物没有运动部件,你就不太可能把它弄坏。所以你隐藏了所有敏感的东西--希望比添加像// Don't touch this!
这样的评论更有效。
不幸的是,JavaScript中的一切都是全局的、可见的和可变的。在JavaScript中封装事物的唯一方法是将它们放在函数中。在JavaScript中,您无法获得OOP的大部分保证/好处。但有些人喜欢OOP。一些问题最好用OOP来解决,即使使用JavaScript这种方式有点人为的。
您在这里看到的是有人在闭包中设置数据和函数,以使这些细节不那么公开。我不知道它有多有效,因为JavaScript对象几乎没有提供任何保证。
最有可能的是,这种情况的好处是,编写代码的人能够按照习惯于使用面向对象语言(如Java )思考代码的方式来思考代码。如果你喜欢那样的想法,那么它会帮助你。如果没有,那么我也看不到尝试在JavaScript中执行OOP的好处。
但是如果您的问题是关于封装的,那么正如Robert所提到的,这几乎总是一件好事。在函数中放置东西(或“闭包”)是在JavaScript中封装(至少在ES6之前)的唯一方法。
https://softwareengineering.stackexchange.com/questions/304083
复制相似问题