构造函数和Object之间的区别

Cou*_*uto 2 javascript constructor function object

我肯定需要对此有所了解.

有什么区别:

var MY_APP = function(){
    this.firstMethod = function(){
       //something
    };
    this.secondMethod = function(){
       //something
    };
};
Run Code Online (Sandbox Code Playgroud)

var MY_APP = {
    firstKey: function(){
       //something
    },
    secondKey: function(){
       //something
    }
};
Run Code Online (Sandbox Code Playgroud)

除了一个明显的事实,一个是一个函数,另一个是一个对象,代码流,原型,模式有什么不同......什么,我们什么时候应该使用第一个或第二个?

我在这个区域如此分散,以至于我不确定我是否正确地解释了疑问,但如果你问的话可以给出进一步的信息.

Dav*_*ang 5

两者之间的关键区别在于如何使用它们.顾名思义,构造函数旨在创建和设置对象的多个实例.另一方面,对象文字是一次性的,如字符串和数字文字,并且更常用作配置对象或全局单例(例如,用于命名空间).

关于第一个例子,有一些细微之处需要注意:

  1. 执行代码时,会创建一个匿名函数并将其分配给MY_APP,但不会发生任何其他情况.firstMethod并且secondMethod在明确调用MY_APP之前不存在.
  2. 根据my_app应用是如何被调用,这些方法firstMethodsecondMethod会在不同的地方结束了:
    1. MY_APP():由于未提供上下文,因此this默认值window和方法将变为全局.
    2. var app1 = new MY_APP():由于new关键字,会创建一个新对象并成为默认上下文.this引用新对象,并将方法分配给新对象,随后将其分配给新对象app1.但是,MY_APP.firstMethod仍未定义.
    3. MY_APP.call(YOUR_APP):这会调用我的MY_APP,但将上下文设置为另一个对象,YOUR_APP.将分配方法YOUR_APP,覆盖YOUR_APP具有相同名称的任何属性.这是一个非常灵活的方法,允许在Javascript中进行多重继承或混合.

构造函数还允许另一级别的灵活性,因为函数提供闭包,而对象文字则不然.例如firstMethod,如果secondMethod依赖于password对象私有的公共变量(无法在构造函数外部访问),可以通过以下方式非常简单地实现:

var MY_APP = function(){
    var password = "GFHSFG";

    this.firstMethod = function(){
       // Do something with password
       alert(password); // Woops!
    };
    this.secondMethod = function(){
       // Do something else with password
    };
};

MY_APP();

alert(password); // undefined
alert(MY_APP.password); // undefined
Run Code Online (Sandbox Code Playgroud)