我正在尝试自己创建一个javascript框架(所以没有jquery,mootools ...代码请),我想让我的框架的代码只能在框架函数中访问,例如,像这样:
frameworkname({
//framework code here
});
所以我的框架代码不会与其他框架冲突。我知道frameworkname({});
是一个函数,但我不知道如何将代码作为函数参数传递。我知道这是可能的,因为我在jquery中很有经验,jquery到处都有这些东西(例如:$(document).ready(function(){//codehere});
),但jquery开发人员是如何做到这一点的呢?我希望能够为我的框架做到这一点。任何帮助是极大的赞赏。
答案 0 :(得分:6)
函数是JavaScript中的第一类对象。您可以使用与字符串,数字,数组或任何其他数据类型相同的方式传递它们。
var foo = function () { alert(1); };
var bar = function (arg) { arg(); }
bar(foo);
答案 1 :(得分:1)
在javascript中,函数只是一个变量,你提到的代码:
$(document).ready( function () {//code});
实际上,被声明为没有名称的函数,然后将其作为参数传递给“ready()”。 因此,你的思想传递代码以方式运行
frameworkname( {} );
是非法的,因为“{}”是代码块,但不是任何类型的“变量”
答案 2 :(得分:1)
在JavaScript中,变量可以表示任何数据类型。因此,在function frameworkname( x ) { }
中可以采用任何类型的参数(函数,对象,原语等)。
function frameworkname( x ) {
if ( typeof x === "function" ) {
x(); // function passed
} else if ( typeof x === "object" ) {
for ( var i in x ) {
// Object passed
x[i]();
}
}
}
frameworkname(function() {
alert("function passed as argument");
});
frameworkname({
hello: function() {
alert("hello");
}
});
答案 3 :(得分:0)
我认为是这样的:
function frameworkname(){
this.ready = function(code){
code();
};
return this;
}
frameworkname().ready(function(){
console.log('Function executed');
});