这两个JavaScript函数有什么区别?

3

我想知道在以下情况下,insideFnoutsideFn之间有什么区别:

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

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

哪种更有效?
3个回答

5
在第一种情况下,使用Construct创建的每个实例都将拥有自己的insideFn,如果您使用多个实例,则会浪费内存。在第二种情况下,Construct的每个实例只会有一个对outsideFn的引用。因此,后者更好。

只有在存在多个实例时才会浪费内存。 - Thilo
第一种情况也有好处:insideFn将可以访问在Construct中声明的所有变量。这样,您就可以模拟私有实例变量。 - Raphael Schweikert

0

在第一个结构中,该方法是Construct实例的属性。 在第二个结构中,该方法是来自Constructprototype对象的属性。

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

有关更好的英语和更多详细信息,请参见http://www.javascriptenlightenment.com/


-1

第一个 function Construct() {} 是一个类(在JavaScript中它是一个对象),而后面你使用关键字prototype继承(扩展)这个类,并添加了另一个函数outsideFn。在JavaScript中没有特定的类,因此必须将对象用作类。


-1:这个答案使用了不太准确的术语(“类”,“继承”),因此有些令人困惑。虽然它从技术上提出了一些适用的观点,但没有解释这些观点的后果。 - Raphael Schweikert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接