这两个javascript函数之间有什么区别?

这两个javascript函数之间有什么区别?,javascript,Javascript,我想知道在以下情况下,内部fn和外部fn之间的区别是什么: function Construct() { this.insideFn = function(obj){ .... } } Construct.prototype.outsideFn = function(obj){ ... } 使用哪一个是有效的?第一个函数构造(){}是一个类(在javascript中它是一个对象),而稍后您将使用关键字prototype继承(扩展)这个类,

我想知道在以下情况下,内部fn外部fn之间的区别是什么:

 function Construct()
 {       
   this.insideFn = function(obj){
   ....
   }
 }

 Construct.prototype.outsideFn = function(obj){
      ...
 }

使用哪一个是有效的?

第一个
函数构造(){}
是一个类(在javascript中它是一个对象),而稍后您将使用关键字
prototype
继承(扩展)这个类,并在外部添加一个
函数fn
。JavaScript中没有特定的类,因此您必须使用对象作为类。

在第一种情况下,使用
构造创建的每个实例都将有自己的
insideFn
,如果使用多个实例,这将浪费内存。在第二种情况下,
Construct
的每个实例将只引用
外部fn
。因此后者更好。

在第一个构造中,方法是
构造的实例的属性。
在第二个构造中,该方法是来自
construct
prototype
对象的属性

如果在
prototype
对象中定义函数,则调用时它们将是相同的。
prototype
变体通常可以节省内存并加快代码速度。 您还可以在对象实例中重载
prototype
函数,以更改对象的默认行为


有关更好的英语和更多详细信息,请参见

仅当存在多个实例时才浪费内存第一种情况也有好处:
insideFn
将访问
构造中声明的所有变量。通过这种方式,您可以模拟私有实例变量。-1:这是一个令人困惑的答案,因为它使用了不精确的术语(“类”、“继承”),虽然它在技术上提出了一些适用的观点,但它并没有解释这些观点的后果。