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)
除了一个明显的事实,一个是一个函数,另一个是一个对象,代码流,原型,模式有什么不同......什么,我们什么时候应该使用第一个或第二个?
我在这个区域如此分散,以至于我不确定我是否正确地解释了疑问,但如果你问的话可以给出进一步的信息.
两者之间的关键区别在于如何使用它们.顾名思义,构造函数旨在创建和设置对象的多个实例.另一方面,对象文字是一次性的,如字符串和数字文字,并且更常用作配置对象或全局单例(例如,用于命名空间).
关于第一个例子,有一些细微之处需要注意:
firstMethod并且secondMethod在明确调用MY_APP之前不存在.firstMethod并secondMethod会在不同的地方结束了:
MY_APP():由于未提供上下文,因此this默认值window和方法将变为全局.var app1 = new MY_APP():由于new关键字,会创建一个新对象并成为默认上下文.this引用新对象,并将方法分配给新对象,随后将其分配给新对象app1.但是,MY_APP.firstMethod仍未定义.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)