我正在处理一些旧程序员留下的代码。他用
$.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 );
});
}
答案 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 + "!");
}