这两种不同的创建对象文字的方法有什么区别

时间:2015-03-29 08:13:26

标签: javascript

我刚刚学习来自c#的javascript。我已经看到了两种创建对象的方法。两者有什么区别?他们似乎做同样的事情。

var myContact = {

    first: "greg",
    last: "gum",
    fullName: function()
    {
        return this.first + " " + this.last;
    }

}

alert(myContact.fullName());


var myContact2 = function () {

    this.first = "greg";
    this.last = "gum";
    this.fullName = function()
    {
        return this.first + " " + this.last;
    }
};

var aContact = new myContact2();

alert(aContact.fullName());

3 个答案:

答案 0 :(得分:2)

方法调用 - 存储在对象属性中的方法JavaScript函数。在方法调用中,对象成为调用上下文,函数体可以使用关键字this引用该对象。

var myContact = {

first: "greg",
last: "gum",
fullName: function()
   {
    return this.first + " " + this.last;
   }
}

构造函数调用 - 如果函数或方法调用前面有关键字new,那么它是构造函数调用。

var myContact2 = function () {

this.first = "greg";
this.last = "gum";
this.fullName = function()
  {
    return this.first + " " + this.last;
  }
 };

如果构造函数没有参数,则可以省略参数列表和paranthesis。所以这两个是等价的:

var aContact = new myContact2();
var aContact = new myContact2;

答案 1 :(得分:2)

JavaScript objects

  
      
  • 可以通过文字创建
  •   
  • 可以分配给变量,数组条目和其他对象的属性
  •   
  • 可以作为参数传递给函数
  •   
  • 可以作为函数
  • 的值返回   
  • 可以拥有可以动态创建和分配的属性
  •   

JavaScript functions

  
      
  • 以上所有
  •   
  • 此外,可以调用函数
  •   

由于JavaScript中的函数拥有所有功能对象,因此它们被称为第一类对象

其他信息:

在JavaScript中有四种方法来调用函数。您在此处使用它的方式是按构造函数调用

当通过new运算符将该函数作为构造函数调用时,其上下文被定义为新的对象实例。这意味着我们可以通过this参数初始化构造函数中的值(除了通过原型附加属性)。



var obj = function() { this.whatever = "hello"; } // 'this' refers to `obj`
var instance = new obj();
alert(instance.whatever);                         // alerts 'hello'




如果我们选择这样做,在构造函数内创建的实例成员将遮挡原型中定义的同名属性。构造函数中的绑定操作始终优先于原型中的绑定操作。

调用构造函数时,会发生以下情况:

  • 创建一个新的空对象。
  • 此对象作为this参数传递给构造函数,因此成为构造函数的函数上下文。
  • 如果没有任何显式返回值,则新对象将作为构造函数的值返回。

其他3个JavaScript函数调用:

  
      
  • 作为一项功能
  •   

当使用()运算符调用函数时,会发生这种类型的调用,而函数上下文是全局上下文 - 通常是窗口对象。例如:



function example(){ return this; };
alert(example() == window); // invocation as a function (`this` is the global context)




  
      
  • 作为一种方法
  •   

将函数分配给对象的属性时,通过使用该属性引用该函数来发生调用。该对象成为函数上下文,并通过this参数在函数中可用。这是JavaScript允许编写面向对象代码的主要方法之一。例如:



var example = {};
example.whatever = function(){ return this; };
alert(example == example.whatever()); // invocation as a method (`this` is the object to which this method belongs)




  
      
  • 通过apply()或call()方法
  •   



var context = {};
function example() {
    alert(this == context); // showing that we set the context
}

example.call(context);      // invocation using `call`




唯一的区别是call()将函数参数视为逗号分隔,apply()获取数组中的函数参数。

答案 2 :(得分:0)

myContact是一个单一的实例。

myContact2你可以创建多个实例。

你遗漏了

var myContact3 = function(){

    return {
        first: "greg",
        last: "gum",
        fullName: function()
        {
            return this.first + " " + this.last;
        }
    };

};

:)

在您想要原型功能之前,这两个世界中最好的一个!