Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用原型方法与普通函数的区别_Javascript_Node.js - Fatal编程技术网

Javascript 使用原型方法与普通函数的区别

Javascript 使用原型方法与普通函数的区别,javascript,node.js,Javascript,Node.js,我有以下几种情况。我正在定义一个新类C,并将其导出为节点模块。我想知道使用普通函数(方法1)与使用原型方法(方法2)有什么区别 使用方法1的助手似乎没有全局名称空间污染问题(因为它位于模块内部),但是方法2实际上可以通过原型继承将一些内部内容(这里是助手方法)公开给外部 是否存在其他差异(性能等)?我通常应该使用哪一种 C.prototype.func=function(){ // need to call helper, use either // helper(); // or

我有以下几种情况。我正在定义一个新类
C
,并将其导出为
节点
模块。我想知道使用普通函数(
方法1
)与使用原型方法(
方法2
)有什么区别

使用
方法1
的助手似乎没有全局名称空间污染问题(因为它位于模块内部),但是
方法2
实际上可以通过原型继承将一些内部内容(这里是
助手
方法)公开给外部

是否存在其他差异(性能等)?我通常应该使用哪一种

C.prototype.func=function(){
  // need to call helper, use either 
  // helper();
  // or
  // this.helper();
}
function helper(){// method 1
}
C.prototype.helper=function(){// method 2
}
module.exports = C;
如果将
helper()
定义为模块内的函数,则它在以下方面与方法不同:

  • 调用
    helper()
    时,该
    指针将不会指向相关对象,因此您将无法访问成员变量
  • helper()
    不是对象上的方法,因此其他人不能以这种方式使用它
  • 如果函数没有真正对对象的属性进行操作,并且您只需要在模块中使用它,那么将其作为模块中的函数而不是方法是有意义的

    如果您希望能够从外部世界调用它,那么它必须在其他地方定义,如果它确实使用对象的属性进行操作,那么将其作为对象上的公共方法是很自然的


    因此,选择哪一个取决于需求和情况。

    场景是显而易见的

    1) 您只需要在用于 其他部分,不希望暴露在外面,只是定义了 局部函数

    2) 如果要通过模块的引用使用函数,请使用 module.prototype将其暴露在外部,以便您可以使用, 修改…它

    例如,原型是javascript对象的一个非常重要的属性
    您可以参考

    FYI的详细信息,您不需要像您所展示的那样在原型上定义功能。它应该是
    C.prototype.helper=function(){…}