jquery .data返回一个函数

时间:2011-05-09 18:52:19

标签: javascript jquery

我正在处理一些旧程序员留下的代码。他用

$.data(item, "onlyIfCheckShow")();

我想知道jquery.data是否会返回一个函数。这看起来很奇怪。 以下是直接从jquery.js中提取的数据代码:

data: function( key, value ){
        var parts = key.split(".");
        parts[1] = parts[1] ? "." + parts[1] : "";

        if ( value == null ) {
            var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

            if ( data == undefined && this.length )
                data = jQuery.data( this[0], key );

            return data == null && parts[1] ?
                this.data( parts[0] ) :
                data;
        } else
            return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
                jQuery.data( this, key, value );
            });
    }

2 个答案:

答案 0 :(得分:4)

一个简单的练习

$([document.body]).data('func', function(){ 
    return alert("passed"); 
});

$([document.body]).data('func')();
ECMA-262(Javascript)变量中的

是对象,而函数是另一种对象,如String,Number,Array ......变量可以是没有问题的对象,语言的灵活性可以让你做的事情就像。

var funcarray = function() {
    return ['one','two','three'];
}

funcarray()[2]; // will be "three"
希望这很有用,祝你有个美好的一天。

答案 1 :(得分:0)

正如falcacibar所说,在Javascript(ECMAScript)函数中是对象。这意味着您可以将一个值指定为值,如此(使用jQuery's data function):

var func = function () { alert("Hello!"); };
$.data(item, "onlyIfCheckShow", func);

话虽如此,您可以看到变量使用内置typeof运算符的对象类型,如果您在使用()运算符时尝试防止错误,这可能很有用在非功能对象上:

if (typeof myObject === 'function') {
    myObject();
} else {
    console.log("ERROR: myObject is not a function, it's a " + typeof myObject + "!");
}