JavaScript引用类型对象与普通对象之间的区别

时间:2015-08-03 19:02:19

标签: javascript function object

我目前正处于JavaScript的学习过程中。我与Objects(引用类型和普通对象)混淆了。以下是一些创建对象的代码(引用类型):

function TheObject(first, last) {
  this.first = first;
  this.last = last;
}

TheObject.prototype.theMethod = function() {
  document.write("first : " + this.first + ", last : " + this.last + "</br>");
};

var anObject = new TheObject("Google", "Good");
anObject.theMethod();

以下是一些其他代码也会创建一个对象(它也是引用类型?):

var TheAnotherObject = function(first, last){
   return {
     first : first,
     last : last,

     theMethod : function() {
       document.write("first : " + this.first + ", last : " + this.last + "</br>");
     }
   };
 }

 var anotherObject = TheAnotherObject("Yahoo", "Good");
 anotherObject.theMethod();

现在,我的困惑在于这两种创建对象的方式之间的实际区别。我知道我可以用两种方式创建一个Object类型(使用“new”关键字)。那有什么区别?

请帮助我理解我在这里缺少的一点。我知道,因为JavaScript大量使用函数和对象,所以理解这一点非常重要。任何帮助将非常感谢。提前谢谢。

2 个答案:

答案 0 :(得分:1)

主要区别是:

第一种方法使用theMethod定义prototype方法。这意味着从instances创建的所有Class将使用该方法的相同定义(theMethod

否则,每次从theMethod创建新instance时,第二种方法都会定义新的Class方法。显然,当有太多实例时,它会很昂贵,因为theMethod会有几个定义做同样的事情。

答案 1 :(得分:1)

在创作方面,它们是一样的。

然而,不同之处在于方法被分配给原型的第一种方式,这意味着该方法只有一个实例。

在第二个例子中,为每个新对象定义了方法。

所以基本上theMethod的引用并不相同,这意味着o1.theMethod!= o2.theMethod