之间有什么区别
var myView = function () {
//something goes here
};
和
var myView = function () {
//something goes here
return {
a: x,
b: y
}();
我认为第一个代码段创建了一个“动态”类,因此您可以说
var anotherView = new myView();
并且第二个片段类似于单个“动态”对象,但我不太确定。
答案 0 :(得分:14)
Javascript使用原型继承,因此 本身没有类。一切都是一个对象;只是某些对象有一个共同的父对象,当名称解析查找原型链时,会找到其方法/变量。
您的第一个代码段会创建一个名为myView
的对象,其类型为函数。您的第二个代码段定义了一个匿名方法,该方法返回一个对象(具有两个属性a
和b
),然后立即调用此方法,将结果分配给myView
。所以在第二种情况下,myView
是一个具有两个自定义属性的对象。
这可能会帮助你阅读Douglas Crockford对prototypal inheritance in Javascript的描述,因为听起来你对细节有点模糊。
答案 1 :(得分:2)
javascript中没有类。
正如您所提到的,您的第一个示例是针对可重用的对象,而您的第二个示例仅针对单个对象。
这里的主要区别在于你在第二个例子中立即调用该函数并且它向你返回一个对象,而你需要每次使用类似a=new myView()
的东西显式调用第一个函数(它是) )那提供了这个调用。
我将第二个示例(称为crockford的模块模式)用于一个与页面相关的任务,以及该页面中可重用组件的第一个示例(使用处理程序等多次生成一些元素)
另请阅读有关原型继承的内容,以便您了解如何有效地使用第一个示例来编写性能更好的javascript代码。
答案 2 :(得分:0)
var myView = function () {
//something goes here
};
这是未执行的函数表达式。
和
var myView = function () {
//something goes here
return {
a: x,
b: y
}();
该函数表达式由于在函数后加上括号“()”而被执行,从而导致Object返回。
再次使用New
关键字创建构造函数,并且不适用于Object。