当前位置: 首页 > 知识库问答 >
问题:

使用原型JavaScript-最佳实践

宇文俊明
2023-03-14

目前我正在一个项目中工作,我们正在编写面向对象的JavaScript。在本项目中,我看到了定义类的两种不同方式:

1:在原型上立即声明函数

My.Namespace.ClassName = function(param1, param2) {
   this.member1 = param1;
   this.member2 = param2;
};

My.Namespace.ClassName.prototype = {
   myFunction1: function() {
      return this.member1 + " " + this.member2;
   },

   myFunction2: function(param1) {
      this.member3 = paraml;
   }
};

2:在原型上准备每个功能

My.Namespace.ClassName = function(param1, param2) {
   this.member1 = param1;
   this.member2 = param2;
};

My.Namespace.ClassName.prototype.myFunction1 = function() {
   return this.member1 + " " + this.member2;
};

My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
   this.member3 = paraml;
};

基于这两个给定的示例,JavaScript的行为有什么不同吗?还是只是风格上的不同?

就我个人而言,我没有看到任何行为上的差异,但我有一种感觉,那就是一定有一种微妙的差异,而我目前正错过这种差异。

除此之外。我想知道这是一种常见的做法还是有更好的方法来定义类。

共有1个答案

东门越
2023-03-14

有一个微妙的区别。在第一种方法中,当您覆盖原型时,其中的一个属性现在已丢失。这是构造函数,它指向您的函数。构造函数允许您重新创建它所属的对象类型。

你可以很容易地得到它回来,所以使用第一种方法手动设置它:

My.Namespace.ClassName.prototype = {
   myFunction1: function() {
      return this.member1 + " " + this.member2;
   },

   myFunction2: function(param1) {
      this.member3 = paraml;
   },
   constructor: My.Namespace.ClassName
};

另见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

 类似资料:
  • 问题内容: 我开发Joomla网站/组件/模块和插件,并且每隔一段时间我都需要使用JavaScript来加载页面时触发事件的功能。在大多数情况下,这是使用函数完成的。 我的问题是: 这是在页面加载时触发JavaScript事件的最佳方法,还是有更好/更新的方法? 如果这是触发页面加载事件的唯一方法,那么确保多个事件可以由不同的脚本运行的最佳方法是什么? 问题答案: 可以,但是您可能已经注意到, 它

  • 问题内容: 我正在调用一个Web服务,该服务返回JSON中的对象数组。我想获取这些对象并使用HTML填充div。假设每个对象都包含一个url和一个名称。 如果我想为每个对象生成以下HTML: 是否有最佳做法?我可以看到几种方法: 连接字符串 创建元素 使用模板插件 在服务器上生成html,然后通过JSON投放。 问题答案: 选项#1和#2将是您最直接的直接选项,但是,对于这两个选项,您都将通过构建

  • 问题内容: 我想了解何时在js中使用原型方法。应该一直使用它们吗?还是在某些情况下不优选使用它们和/或导致性能下降? 在此站点上搜索js中命名空间的常用方法时,似乎大多数人都使用了基于非原型的实现:简单地使用对象或函数对象来封装名称空间。 来自基于类的语言,很难不尝试绘制相似之处,并认为原型就像“类”,而我提到的命名空间实现就像静态方法。 问题答案: 原型是一种 优化 。 很好地使用它们的一个很好

  • 问题内容: 我有一个普通的Node.js脚本,该脚本通过API从Wikipedia中提取数据并将其存储在SQLite数据库中。我正在使用此node- sqlite3 模块。 在某些情况下,我要提取多达60万篇文章中的数据,并在数据库中连续存储有关每篇文章的一些元数据。从API中以500为一组检索文章。 检索带有500条文章中的数据的JSON对象的请求将对象传递给此回调: 这些模块默认情况下并行运行

  • 让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey 另外一种方式使用 groupByKey: val words = Array("one", "two", "two", "three", "three", "three") val wordPairsRDD = sc.parallelize(words).map(word => (word, 1)) val

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们