jQuery"return{foo:bar,foo2:bar2}"-它是什么
jQuery "return { foo: bar, foo2: bar2 }" - What is it?
我正在自学jQuery/Javascript,并且正在浏览Avgrund源代码,我不确定avgrund.js
中return语句的确切用途。
它的功能是否像某种伪类?在Avgrund的index.html
中,这里定义的函数:var Avgrund = (function(){ ...
似乎被称为返回语句/函数的成员,或者任何技术名称。
此:
return {
activate: activate,
deactivate: deactivate,
disableBlur: disableBlur,
show: show,
hide: hide
}
这只是限制function_name
的调用方式吗?所以,我只能呼叫function_name. [ activate / deactivate / disableBlur / show / hide ]
。
冒号之后是要调用的函数名吗?例如,
method: lemon
。如果我调用Avgrund.method()
,它将调用函数lemon
。
总的来说,我正在寻找这个返回语法的解释,我在这里走对了吗?
这种类型的结构叫什么,这样我就可以在Coffeescapet中复制它了?
这基本上是在JS中创建对象的简写。此:
return {
activate: activate,
deactivate: deactivate,
disableBlur: disableBlur,
show: show,
hide: hide
}
相当于:
var x = new Object();
x.activate = activate;
x.deactivate = deactivate;
x.disableBlur = disableBlur;
x.show = show;
x.hide = hide;
return x;
此调用:var x = {}
与var x = new Object()
相同
您正处于正确的路径上;它被称为揭示模块模式。
阅读Addy Osmani关于设计模式的书中的模块模式和揭示模块模式。这是一个很好的资源。
返回值是对象
function fun() {
return {
activate: activate,
deactivate: deactivate,
disableBlur: disableBlur,
show: show,
hide: hide
}
}
var obj = fun();
console.log(obj['deactivate']); //obj.deactivate
如前所述,它返回一个对象。
在本例中,您可以将函数和变量封装在Test
中。通过返回一个对象文字,您基本上可以控制最终用户可以调用什么。
var Test = (function() {
var test = function() {
console.log("hello thar.");
};
var test2 = function() {
console.log("nope");
};
return {
test: test
};
})();
Test.test();
Test.test2(); // syntax error
阅读JavaScript模式-http://www.klauskomenda.com/code/javascript-programming-patterns/
你所指的似乎是揭示模块模式。
var Avgrund
,它被设置为所谓的"IIFE"立即调用函数,你可能会听到它也被称为"自调用函数",它是同一事物的不同短语。下面是你显示的函数中"IIFE"(function() {...} )();
的语法,它返回,稍后将对该对象进行更多的对象{ }
。
在Javascript中,立即调用函数的符号是在关键字函数之前打开括号(
。在该函数的末尾,您会注意到一对括号"()",它告诉javascript立即运行调用的该函数。
"IIFE"正在返回一个对象。在javascript中,对象由key:value
对的集合表示,这些对由大括号{ }
中的逗号,
分隔。所以var emptyObject = {}
是一个空对象。
在其他语言中,他们称之为散列、映射、关联数组和字典,但它们本质上都是key:value
对的集合。
return {
activate: activate,
deactivate: deactivate,
disableBlur: disableBlur,
show: show,
hide: hide
}
在源代码中,您有一些函数,例如activate,它们被封装在"IIFE"的函数范围内,所以返回的对象所做的就是公开这些函数供您使用。例如,show: show
当时并没有调用函数,它的符号在函数名称后面没有()
,它只是说嘿,这里的显示值记住key:value
是一个函数。因此,在代码的其他地方,您将调用它并调用它Avgrund.show(...)
,就像在HTML中那样。
JavaScript中的函数具有一定范围的可见性。这意味着内部函数只能在外部函数中可见。例如:
function outer() {
function inner() {
}
function callInner() {
inner(); // OK
}
}
inner(); // ReferenceError: inner() not defined
在Avgrund的情况下:
function Avgrund () {
function disableBlur() {
console.log('disableBlur called');
}
function print() {
// I can see other functions inside Avgrund
disableBlur();
}
}
由于在我们的示例中,Avgrund被定义为一个命名函数,因此它将在全局对象(浏览器中的window
对象)中可见。然而,Avgrund内部的命名函数在Avgrud对象本身之外是不可见的。为了访问这些功能,我们可以返回它们:
function Avgrund () {
function disableBlur() {
console.log('disableBlur called');
}
function print() {
// I can see other functions inside Avgrund
disableBlur();
}
return {
print: printShow
}
}
Avgrund被定义为构造函数(用于创建新对象的函数)。所以Avgrund被定义但从未执行。让我们运行这个函数,看看会发生什么:
var avg = (function Avgrund () {
function disableBlur() {
console.log('disableBlur called');
}
function print() {
// I can see other functions inside Avgrund
disableBlur();
}
return {
print: print
}
})();
现在,我们的Avgrund的新实例返回了一个对象,其中包含对Avgrund自身内部函数print()
的引用。我们现在可以从Avgrund外部访问:
avg.print() // disableBlur called
现在回答你的问题。正如您已经正确猜测的那样,这个构造(返回内部函数的引用对象)用于限制对Avgrund中方法的访问。本质上定义Avgrund的公共API函数,并将它们与打算用作私有函数的函数分离。
正如misterkeg和DotNetHaggis所提到的,这种模式被称为Revealing Module Pattern
。
正如其他人已经指出的,返回的类型是一个简单的对象。
在javascript中,您可以创建匿名对象。在javascript中,对象实际上是关联数组。
所以基本上,如果你想用JavaScript创建一个对象,有很多方法之一就是:
var obj = {};
因此,您提供的代码意味着您正试图返回一个对象并"激活"、"停用"。。是此对象的属性
请阅读这篇文章,你会有更好的想法。
http://3dmdesign.com/development/javascript-variables-and-anonymous-objects
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- jQuery"return{foo:bar,foo2:bar2}"-它是什么