[英]jQuery “return { foo: bar, foo2: bar2 }” - What is it?
我正在尝试自学jQuery / Javascript,并且正在浏览Avgrund源代码 ,我不确定avgrund.js
return语句的确切目的。
它像某种伪类一样起作用吗? 在Avgrund的index.html
,函数定义如下: var Avgrund = (function(){ ...
似乎被称为我的return语句/函数的成员或具有的任何技术名称。
这个:
return {
activate: activate,
deactivate: deactivate,
disableBlur: disableBlur,
show: show,
hide: hide
}
这只是限制如何function_name
方法吗? 因此,我只能调用function_name. [ activate / deactivate / disableBlur / show / hide ]
function_name. [ activate / deactivate / disableBlur / show / hide ]
。
而且,在冒号之后是要调用的函数名称吗? 例如,
method: lemon
。 如果我叫Avgrund.method()
它会调用该函数lemon
。
总的来说,我正在寻找这种返回语法的解释,我在这里的正确路径吗?
这种结构叫什么,以便我可以在Coffeescript中复制它?
这基本上是在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()
返回值是一个对象
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/
您所指的似乎是显示模块模式。
在javascript中,您可以创建匿名对象。 在javascript中,对象实际上是关联数组。
因此,基本上,如果您想使用JavaScript创建对象,可以采用以下多种方法之一:
var obj = {};
因此,您提供的代码意味着您试图返回一个对象,并且“ activate”,“ deactivate” ..是该对象的属性。
请阅读这篇文章,您将有一个更好的主意。
http://3dmdesign.com/development/javascript-variables-and-anonymous-objects
第一部分是变量声明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
}
在源代码中,您具有例如激活的功能,这些功能包含在“ IIFE”的功能范围之内,因此返回的对象正在做的事情是公开这些功能供您使用。 所以show: show
例如show: show
当时没有调用函数,函数名后的符号是no ()
,这里只是说嘿show value记住key:value
是一个函数。 因此,在其他地方,您将在代码中调用它并像在HTML中那样调用它Avgrund.show(...)
。
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
。
正如其他人已经指出的那样,返回的类型是一个简单的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.