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

如何在JavaScript中定义类方法以确保模块化和性能,javascript,performance,object,optimization,class-method,Javascript,Performance,Object,Optimization,Class Method,在about JavaScript代码优化中,他们在“定义类方法”一节中建议使用prototype将方法作为属性添加到函数中(在JavaScript中被视为对象) 例如,不要这样定义函数构造函数体中的方法: baz.Bar = function() { // constructor body this.foo = function() { // method body }; } baz.Bar = function() { // constructor body }; baz.Bar.pro

在about JavaScript代码优化中,他们在“定义类方法”一节中建议使用prototype将方法作为属性添加到函数中(在JavaScript中被视为对象)

例如,不要这样定义函数构造函数体中的方法:

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

baz.Bar.prototype.foo = function() {
// method body
};
应使用prototype以这种方式定义方法:

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

baz.Bar.prototype.foo = function() {
// method body
};
但是,我看到了一种添加类方法和创建可重用JavaScript代码的不同方法,这些代码在d3.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代码的性能和重用问题的方法吗?否则,为什么在框架实现中广泛使用它

谢谢和问候
Mohamed Ali

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

作为浏览器,初始化模块和名称空间时的计算开销很小,跟踪时的内存开销也很小,但可能与模块外的等效类和类方法集没有显著区别


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

在该图中,非原型是迄今为止最糟糕的…搞错了,谢谢!这个问题是经过编辑的,请你再看一看,那篇文章中有一些过时的、适得其反的建议。字符串连接现在很好,可选属性实际上对性能影响更大,因为构造函数将创建具有不同隐藏类的对象,即使它们在概念上共享同一个类。有关可选属性的糟糕程度,请参见