Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript函数中,可以设置这个.function=function吗?_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

在javascript函数中,可以设置这个.function=function吗?

在javascript函数中,可以设置这个.function=function吗?,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我遇到过这个jquery插件,我非常了解它的工作原理: $.functionone = function(){ function setOptions(newOptions){ ... } this.setOptions = setOptions; } 我不明白的是这到底是怎么回事this.setOptions=setOptions你能调用没有括号的函数吗?this.setOptions与setOptions之间的关系是什么?只有在添加括号时才会调用函

我遇到过这个jquery插件,我非常了解它的工作原理:

$.functionone = function(){

    function setOptions(newOptions){
        ...
    }
    this.setOptions = setOptions;
}

我不明白的是这到底是怎么回事
this.setOptions=setOptions
你能调用没有括号的函数吗?
this.setOptions
setOptions
之间的关系是什么?

只有在添加括号时才会调用函数setOptions:
setOptions()
。如果不添加括号,则有对函数的引用。这就像一个普通变量,只是它包含一个函数引用而不是其他值


如果设置
this.setOptions=setOptions
,则在此对象上创建一个函数
setOptions
,该函数指向与
setOptions
相同的函数。也就是说,如果您使用
this.setOptions()
调用它,将调用引用的函数。

JavaScript中的函数与(几乎)其他所有函数类似。执行此操作时:

this.setOptions = setOptions;
您没有调用
setOptions
函数,只是将函数的引用指定给属性,就像将属性设置给任何其他对象一样,如下所示:

var dt;
dt = new Date();
this.today = dt;
this.setOptions = function() {
    ...
};
this.setOptions = function setOptions() {  // <=== DON'T DO THIS
    ...
};
对于函数,您可以这样做,以便以后可以通过属性调用函数(该属性将
this
值设置为属性所在的对象,这很方便)。如果对属性使用与函数不同的名称,则会更清楚地看到发生了什么:

function functionName() { ... }   // Declares the function
this.propertyName = functionName; // Sets the property
functionName();                   // Calls the function (with `this` = the global object ["window", on browsers])
this.propertyName();              // Also calls the function (but with `this` = the object the property's on)
您标识的模式(声明函数,然后在对象上单独设置对它的引用)经常用于确保生成的函数具有名称。您可以创建一个函数并将其绑定到如下属性:

var dt;
dt = new Date();
this.today = dt;
this.setOptions = function() {
    ...
};
this.setOptions = function setOptions() {  // <=== DON'T DO THIS
    ...
};
…但是函数没有名称(属性有,但函数没有),这在您尝试调试时可能会出现问题,因为调试器会在各种上下文(例如调用堆栈)中显示函数的名称。如果很多函数都没有名称,即使引用它们的属性有名称,也会使调试变得困难。(函数实例化的时间也有区别,但在这里讨论它只会使事情复杂化。)

你会认为你可以把这些东西结合起来,比如:

var dt;
dt = new Date();
this.today = dt;
this.setOptions = function() {
    ...
};
this.setOptions = function setOptions() {  // <=== DON'T DO THIS
    ...
};

this.setOptions=function setOptions(){//Hey,在这个上下文中,我不太理解代码中的“this”,你难道不能调用方法$('div')。functionone.setOptions()?它的用途是否仅在类内部应用?如果没有上下文,则不清楚此
指向什么。它不必指向当前类。它可能指向div,如$('div')所示。因此,此代码将setOptions方法添加到diff中,以便您可以执行$('div')。setOptions()。您不能执行$('div')).functionone.setOptions(),不能在这样的函数中调用函数。