如何在 JavaScript 中定义类方法以确保模块化和性能



在Google开发人员关于JavaScript代码优化的文章中,他们在"定义类方法"一节中建议使用原型将方法作为属性添加到函数(在JavaScript中被视为对象)。

例如,不要以这种方式定义函数构造函数体内的方法:

baz.Bar = function() {
// constructor body
this.foo = function() {
// method body
};
}

方法应通过以下方式使用原型定义:

baz.Bar = function() {
// constructor body
};
baz.Bar.prototype.foo = function() {
// method body
};

但是,我看到了一种不同的方法,即添加类方法并创建在 d3 等框架中使用的可重用的 JavaScript 代码.js以实现基于 JS 闭包的核心方法,例如:

var nameSpace = {}; 
nameSpace.myModule = function(module){
   var myVar = ''; 
   function exports(){
   }
   //getter and setter for myVar 
   exports.myVar = function(_x){
       if(!arguments) return myVar; 
       myVar = _x; 
       return this; // to allow for method chaining 
   }
   exports.method1 = function(){
     //do something 
   }
   exports.method2 = function(){
     //do something 
   }
   return exports;
 }
and then to use the module:
var test = nameSpace.myModule(); 
test.method1(); 

最后一种方法是否是JavaScript代码的性能和重用的答案,否则为什么它在框架实现中被广泛使用?

谢谢和问候穆罕默德·阿里

作为用户,当模块包含大量不使用的方法和类时,它们会对性能造成影响。 如果您只需要几个成员,最好将它们单独创建为类,而不是导入完整的模块。

作为浏览器,初始化模块和命名空间的计算开销很小,跟踪

的内存开销很小,但可能与模块外部的等效类和类方法集没有显著区别。

作为编写者,当您认为用户通常需要所有成员时,将代码组织到模块中是一种很好的做法。 最好有几个包含多个相关组件的模块(一个"包"),而不是 25 个原始组件或一个包含所有组件的模块。 这种易用性和理解性、划分为命名空间(这允许您使用有意义的名称而不会与其他命名空间冲突)以及将相关类和函数分组到各个模块中是它通常在框架中使用的原因,您可能会使用每个模块的大多数组件。

最新更新