如何通过Javascript中的“fn”成员定义函数?

如何通过Javascript中的“fn”成员定义函数?,javascript,function,Javascript,Function,我找到了以下定义 $.fn.flex = function ( options ) { var p = this.data("flex"), opts = options || {}; if (p) return p; this.each(function () { p = new Flex( this, opts ); $(this).data("flex", p); }); return opts.api ? p :

我找到了以下定义

$.fn.flex = function ( options ) {
   var p = this.data("flex"),
           opts = options || {};
   if (p) return p;
   this.each(function () {
      p = new Flex( this, opts );
      $(this).data("flex", p);
   });
   return opts.api ? p : this;
}; 
它在原始代码中定义了函数flex

不幸的是,它停止了在我的环境中定义这个函数,即函数调用会导致一个错误,即flex不是一个函数

对于flex作为一个功能来说,什么是至关重要的

更新

对不起,实际上我没有修改任何内容。我只是将这个javascript放入我的环境Liferay和运行脚本的代码中

<script type="text/javascript">
    $(function() {
        $(".flex").flex();
    });
    </script>
如果我将flex重命名为flex1,它会说flex1不是一个函数。

首先,$.fn.flex$和fn是jQuery变量。它们不是JavaScript的本机代码。$。jQuery提供的将方法/属性附加到jQuery对象的fn

对不起,实际上我没有修改任何内容。我只是把这个javascript。。。进入我的环境Liferay和运行脚本的代码

<script type="text/javascript">
    $(function() {
        $(".flex").flex();
    });
    </script>
因为这是一个jQuery插件,所以需要确保在页面上jQuery之后包含该脚本。所以

<script src="/path/to/jquery.js"></script>
<script src="/path/to/the-plugin.js"></script>

如果将它们按其他顺序放置,第一个脚本将失败,因为它将尝试获取jQuery符号的值,而jQuery符号还不存在,在松散模式和严格模式下都会抛出引用错误。

@Dims,你能发布修改后的版本吗?@t.J.Crowder,如果没有定义任何内容,它将成为全局对象。还是我错了?@AmitJoki:一个全局变量不一定引用对象,是的,除非你使用的是严格模式,这使它成为应该的错误。我已经修复了你代码片段中严重误导的缩进。正在声明opts。您确定吗?该函数以开始;函数$,未定义{use strict;…这不是使$成为一个局部变量吗?@Dims它取决于作为第一个参数传递给它的是什么function@Dims:$是一个参数,实际上是一个局部变量。在插件代码的末尾,您将看到它作为该参数传入jQuery。这是插件的一个相当标准的习惯用法,插件不应该依赖global$symbol,只是全局jQuery符号。@Dims:那么要么插件的代码没有运行,要么jQuery在以后第二次加载。如果您加载jQuery两次,第二个副本将覆盖第一个副本,并且在第一个副本中注册的任何插件将不再注册,因为它们注册的副本已丢失。