jQuery"return{foo:bar,foo2:bar2}"-它是什么

jQuery "return { foo: bar, foo2: bar2 }" - What is it?

本文关键字:quot bar2 它是什么 foo2 bar return foo jQuery      更新时间:2024-05-24

我正在自学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/

你所指的似乎是揭示模块模式。

p>第一部分是一个变量声明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