0

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
};

但是,我看到了添加类方法和创建可重用 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 代码的性能和重用问题,否则为什么它会广泛用于框架实现?

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

4

1 回答 1

0

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

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

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

于 2013-09-20T08:42:04.143 回答