Javascript OOP 最佳实践? [关闭]

2024-01-14

我厌倦了在 Javascript 中看到数十种不同的面向对象编程方式。考虑到我想从事大型项目并且我希望我的代码能够面向未来,任何人都可以告诉我应该使用哪种技术吗?


这些只是我提出的一些快速指南,如果其他人有任何有意义的内容要添加,我已将此答案设置为社区维基,因此您应该很容易编辑。

  1. 对您的对象进行命名,以确保它们永远不会与第三方 JavaScript 库发生冲突。
    
    window['Andrew']['JS'] = {
        addEvent: function(el,evName) {/*Stuff*/},
        Rectangle: function(width,height) {/*Stuff*/}
    };  
    那么你可以使用以下方法创建一个矩形对象:
    
    var myRect = new Andrew.JS.Rectangle(14,11);  
    然后你的代码将永远不会干扰或被其他人的代码干扰Rectangle.

  2. Use a consistent naming strategy, specifically:
    • 对象名称应大写,其他所有内容(变量、函数)应以小写字符开头,即
      
      var myRect = new Andrew.JS.Rectangle(14,11);
      document.write(myRect.getArea());  
    • 确保一切都有意义,即方法的动词,参数的名词+形容词。
  3. Make sure all methods and parameters are relevant to the object they belong to. e.g. In this example, the area of the rectangle can be converted to square feet using the method inSquareFeet().
    
    myRect.getAreaObject().inSquareFeet();  
    Make sure inSquareFeet is a method of the object returned by getAreaObject() and not a method of Andrew.JS.Rectangle
  4. 使用构造函数,或者更具体地说,尽可能努力确保对象在构造后不需要使用任何进一步的初始化,因此不要:
    
    var Person = function()
    {
        this.name = "";
        this.sayHello = function ()
        {
            alert(this.name + " says 'Hello!'");
            return this;
        }
    }
    
    var bob = new Person();
    bob.name = "Bob Poulton";
    bob.sayHello();  
    try:
    
    var Person = function(name)
    {
        this.name = name;
        this.sayHello = function ()
        {
            alert(this.name + " says 'Hello!'");
            return this;
        }
    }
    
    var bob = new Person("Bob Poulton");
    bob.sayHello();  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript OOP 最佳实践? [关闭] 的相关文章

  • 未调用 Ajax 回调。如何解决这个问题?

    我再次来这里寻求您的建议 我有一些 AJAX 调用 用于从我的编辑器 PHP 在线编辑器 运行代码 大家可以来看看my site http web guru99 com 我有一些 ajax 调用来发送编辑器的数据并接收输出 问题 for 循
  • Next.js - 如何使用 Provider 来包装路由并使用 Context 和 Hooks

    我在 create react app 中编写了类似于以下的代码 我想知道 next js 的等效代码 下面的代码是我尝试拥有一个可用于所有页面的全局上下文 提供者包装链接 我没有收到任何错误 问题出在里面about当我期望上下文状态时 页
  • 从 javascript 调用 HttpHandler

    我有一个简单的页面 带有通过 JavaScript 调用 HttpHandler 的按钮 HttpHandler 获取大量文件并将它们添加到 zip 文件中 完成工作后 zip 文件将添加到 Response 中 此操作可能需要几分钟时间
  • 如何使用 jQuery 检查文件输入大小?

    我有一个具有文件上传功能的表单 如果用户尝试上传的文件太大 我希望能够有一些不错的客户端错误报告 是否有一种方法可以使用 jQuery 检查文件大小 或者纯粹是在客户端上或以某种方式将文件发送回服务器进行检查 您实际上无权访问文件系统 例如
  • jQuery 插件与小部件

    几个月前 我开始使用 jQuery 插件进行一些实验 我在互联网上找到了一些教程 然后开始整理一些东西 几天前 我需要构建自己的 插件 并回到我的旧项目 当我试图在互联网上找到更多信息时 我偶然发现了这些称为小部件的新 东西 据我了解 我应
  • 数字和数字对象有什么区别?

    存储在普通变量中的数字有什么区别 var foo 5 和一个数字对象 var bar new Number 5 数字对象可以用来做什么 A Number对象包含一些有用的方法和属性 例如 数字对象方法 Method Description
  • 如果重复,则从数组中删除两个值 - JavaScript/jQuery

    我这里有一个数组 var myArr 1 1 2 5 5 7 8 9 9 现在我想删除重复的两个外观 所以想要的结果是not var myArr 1 2 5 7 8 9 but var myArr 2 7 8 基本上我知道如何删除重复项 但
  • 在 PHP 中合并文件块

    出于教育目的 我想创建文件块上传 你们怎么知道所有块何时上传 我试图从temp并重命名它们 使它们按正确的顺序排列 然后与最后一个块将它们合并在一起 然而 我猜最后发送的并不是最后收到的 所以fopen on chunks 失败 因为它们尚
  • 如何使 CSS 样式覆盖 JavaScript 应用的样式

    我动态创建一个 HTML 表 并应用一些样式 var tbl document createElement table tbl id CrewMemberTable document getElementById CrewMemberPan
  • 指令可以从父作用域中删除自身吗

    假设我有以下代码 div div div div 我的自定义指令有一个独立的范围 定义为 app directive customDirective function log return restrict E templateUrl te
  • 根据每个选项的值或 ID 过滤选择框

    我想使用jquery来过滤表单中的所有选择框 例如 在第一个选择框中 如果我选择 仅显示1 我想过滤所有选择元素中的所有选择选项 以隐藏值不包含 1 的任何选项 仅应显示带有 1 的产品值 如果选择 Filter 选项 则所有选择框的默认值
  • 将焦点和光标设置到文本输入字段/字符串 w 的末尾。 Jquery [重复]

    这个问题在这里已经有答案了 我有以下函数 将选择器添加到搜索输入作为高级选项 就像堆栈溢出高级搜索一样 当您单击要搜索的内容时 它会添加一个前缀 请参阅下面的 Jquery
  • 如何对基于 HTML5-JavaScript 的视频播放器进行快照?

    实际上 我有一个带有 JavaScript 函数的 HTML5 页面 可以让我播放 wmv 视频文件 我需要在视频播放时 有暂停或没有暂停 拍摄快照并以任何图像格式 JPG 或 BMP 保存 任何帮助将不胜感激 谢谢
  • 为什么我会失去对元素的引用?

    我偶然发现了一些奇怪的东西 至少对我来说 案例如下 我选择一个元素 child1 从 DOM 并将其保存到变量中 我继续添加一个新元素child1的家长 parent1 现在 如果我尝试修改某些值child1它不记录更改 似乎引用已经消失
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • 返回不在函数中

    Firebug 报告 返回不在函数中 错误 没有位置 好吧 第 1 行什么都没有 我怎样才能找到这个错误的根源 return not in function Break on this error return 0 javascript r
  • 从选择控件 html 复制所选项目的文本

    我有一个带有预定义值的选择控件 我希望我的用户能够使用 CTRL C 复制所选项目的文本 我不希望他们能够更改项目的文本 只需用鼠标 键盘选择它 这是一个显示问题的小提琴 我无法选择所选项目的文本 http jsfiddle net 5C3
  • 如何对对象数组调用reduce来求和它们的属性?

    说我想求和a x对于中的每个元素arr arr x 1 x 2 x 4 arr reduce function a b return a x b x gt NaN 我有理由相信a x is undefined在某一点 以下工作正常 arr
  • 嵌套对象的 setState

    我有一个嵌套对象作为状态 并且在组件中有一个表单 我正在考虑每次用户在表单中输入某些内容时更新状态 并且为了避免为每个输入创建许多函数 我正在考虑使用 switch 创建单个函数 使用 switch 创建单一函数是个好主意吗 如何更新对象的
  • 网站可以检测您何时将 Selenium 与 chromedriver 结合使用吗?

    我一直在使用 Chromedriver 测试 Selenium 我注意到有些页面可以检测到您正在使用 Selenium 即使根本没有自动化 即使我只是通过 Selenium 使用 Chrome 手动浏览 Xephyr https en wi

随机推荐

  • 如何在不重置服务器实例的情况下重置 application.cfc? [复制]

    这个问题在这里已经有答案了 可能的重复 重新启动应用程序而不重新启动服务器 https stackoverflow com questions 3119119 restart application without restarting s
  • 在弹出窗口中设置标题

    是否可以在弹出窗口中设置标题 我在 JavaScript 中有这个 var popup window open popup document title my title 但这不起作用 仍然看不到任何标题 编辑 页面弹出窗口显示的是 asp
  • 如何通过 Java 使用 Selenium Webdriver 从下拉列表中提取第一个选定选项的文本

    从下拉列表中选择一个选项后 我正在尝试在控制台中显示该选项 下面是我的代码 但我得到 ChromeDriver chrome on WINDOWS d5a01776981da5dacfeb89dbbc2e6b52 gt xpath name
  • std::map 是否自动平衡自身

    我知道STL映射 集的主流实现使用黑红树 我的问题是 这些实现在插入 删除元素时是否也会自动平衡树 如果没有 那么当元素排序和插入时 它总是追加到最右边的位置 最差的查找成本是 O n 那么 黑红树会自动平衡吗 是的 红黑树执行节点旋转以确
  • git fetch origin 不获取所有分支

    我读到的答案这个问题 https stackoverflow com questions 10312521 how to fetch all git branches that git fetch origin应该获取all起源的分支 但就
  • Azure WebApp 未加载我的字体

    我在 Azure 上的 WebApp 遇到了一些问题 我的自定义字体在我的本地主机上正确呈现 但是当我将项目部署到 Azure 并访问网站时 Web 浏览器通知我找不到我的字体 错误 404 但是当我从 Azure 门户访问 FTP 服务器
  • 使用 Python unittest 缓存 setUp() 的结果

    我目前有一个unittest TestCase 看起来像 class test appletrailer unittest TestCase def setup self self all trailers Trailers res 720
  • RandomForestRegressor 和 feature_importances_ 错误

    我正在努力从我的 RandomForestRegressor 中提取特征重要性 我得到 属性错误 GridSearchCV 对象没有属性 功能重要性 有谁知道为什么没有属性吗 根据文档应该存在这个属性 完整代码 from sklearn e
  • 如何释放堆栈上的变量?

    有没有办法释放在堆栈上创建的变量和 或对象 我特意谈论的是堆栈而不是堆 我不想争论这是否有用或良好的做法 我只需要知道它是否可能 我知道当它超出范围时它会自动释放 我想在它超出范围之前取消分配它 我正在使用 C int a a deallo
  • 在 Protractor 中测试模板?

    编写适用于站点中每个页面的断言的最佳方法是什么 我正在测试网站的页脚中是否存在某个元素 因此该元素应该存在于所有页面上 我正在考虑编写一个单独的文件来测试网站的模板元素 然后将其包含在所有规范中 不过似乎没有其他人这样做 首先 为了编写更干
  • Zend Framework:未定义的类常量'MYSQL_ATTR_INIT_COMMAND'

    您可能已经知道 我从之前的问题中从 ubuntu 切换到了 windows 我之前在 ubuntu 上开发 Zend Framework 现在在 Windows 上开发同一个项目 由于这种切换 我在 Windows 中遇到了一些在 ubun
  • EntityTypeConfiguration如何获取关键属性?

    我正在使用 C EF 5 和 MVC4 我正在使用 EntityTypeConfiguration 设置主键和后端表 public class AuditZoneMap EntityTypeConfiguration
  • 为什么 ifstream 文件中的换行符(当通过此代码读取时)占用 2 个字节?

    我使用的文件有 15 行 每行 2 个字符 因此假设文件的大小约为 44 字节 但使用tellg 函数 大小显示为 58 此外 我累积了一个包含所有位置的数组代码正在识别一个换行符 它们都是连续的 因此证实了这个疑问 谢谢你 Tailfil
  • 我不明白为什么我得到 QPainter::begin: Widget Painting can only begin as a result of apaintEvent

    我一直在查看有关此错误的其他 StackOverflow 问题 以及网络上的其他地方 但我不明白这些答案与我的代码有何关系 因此 我希望有一个对我有意义的固定示例 或者更好地解释事件如何以及何时发生 下面的代码旨在计算出其运行的屏幕尺寸 调
  • 为什么这么多网站不允许在密码中使用非字母数字字符?

    在注册时 很多网站不允许在密码中使用符号 从可用性的角度来看 这让我陷入了困境 因为我在所有密码中都包含了多个符号 并且作为一名时不时处理网络身份验证的程序员 我不明白为什么不允许这样做 我错过了什么吗 他们担心 SQL 注入吗 不想处理转
  • 克隆 git 存储库时如何自动保留别名?

    我在 git 存储库的配置文件中设置了一堆方便的别名 我偶尔会克隆这个存储库 例如到我的笔记本电脑上 但克隆不包含我设置的任何别名 大概是因为克隆不会复制存储别名的 git 配置文件 但是 我希望在使用克隆时可以使用这些别名 而无需再次手动
  • 如何下载发送到 Telegram 机器人的文件或照片?

    我正在使用电报机器人 API 但无论如何我都看不到下载发送到我的机器人的文件 我得到了文件的哈希值 但不知道如何处理它 有什么办法吗 谢谢 现在可以使用了 https core telegram org bots api getfile h
  • 警告:将新 ns 映射到旧 ns 并且模拟器突然停止

    升级到 Arctic Fox 后 即使模拟器正在运行但有时会突然停止 我也会收到以下错误 这是什么错误 我怎样才能摆脱这个 我正在使用以下内容复制自cmd gt C Users Debasis gt flutter doctor Docto
  • 如何从xhr下载流媒体视频

    I d like to download a video from a site that uses flowplayer When I inspect the element I get something like So we can
  • Javascript OOP 最佳实践? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi