首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在class.create中封装JS有实际好处吗?

在class.create中封装JS有实际好处吗?
EN

Software Engineering用户
提问于 2015-12-02 12:43:04
回答 1查看 448关注 0票数 3

我正在开发这个web应用程序,它已经有了一种机制,允许开发人员定义服务器端的JavaScript函数,然后由其他服务器端的JS代码调用。

有两种方法来定义这些函数。

这边..。

代码语言:javascript
运行
复制
function iAmFunctionA(arg) {
   ...some code...
}

function iAmFunctionB(arg) {
   ...some other code...
}

...and通过一个选项将函数封装在一个单独的对象中(我认为这是因为web应用程序嵌入了Prototype.js ).

代码语言:javascript
运行
复制
var iAmAClass = Class.create();
   iAmAClass.prototype = {
      iAmFunctionA: function(arg) {
         ...some code...
      },

      iAmFunctionB: function(arg) {
         ...some other code...
      },

   type: 'iAmAClass'
}

后一种类型随后由其他服务器端JS调用,如下所示:

代码语言:javascript
运行
复制
var a = new iAmAClass();
var someRetVal = iAmAClass.iAmFunctionA(arg);

我想问的问题是:在一个对象中封装JavaScript有什么实际好处(S)吗?如果有,那会是什么?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-12-02 21:49:43

我认为这实际上是在尝试将面向对象的思想引入JavaScript。您的代码类似于这个示例: HTML中的创建面向对象的JavaScript类构造器

面向对象编程是一种组织技术。如果您有一个用户数据结构,它可能有以下字段:

代码语言:javascript
运行
复制
firstName
lastName
age

您可能有一些与用户一起工作的函数,

代码语言:javascript
运行
复制
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之前)的唯一方法。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/304083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档