在JavaScript中将密码作为函数参数传递?

7
我正在尝试自己创建一个JavaScript框架(因此请不要使用jQuery、MooTools等代码),我希望将我的框架代码仅限于框架函数中访问,例如:
frameworkname({
//framework code here
});

我希望我的框架代码不会与其他框架冲突。我知道 frameworkname({}); 是一个函数,但我不知道如何将代码作为函数参数传递。我知道这是可能的,因为我在jquery方面有相当丰富的经验,而jquery则无处不用(例如:$(document).ready(function(){//codehere});),但是jquery开发人员是如何做到这一点的?我希望能够为自己的框架做到这一点。非常感谢任何帮助。


3
你是否可以查看jQuery源代码? - m.edmondson
哦,天啊,这是一个误解...我开始同情那些抱怨什么都用jQuery的人了。 - user395760
4个回答

10

在JavaScript中,函数是一等公民对象。你可以像处理字符串、数字、数组或其他任何数据类型一样处理它们。

var foo = function () { alert(1); };
var bar = function (arg) { arg(); }
bar(foo);

谢谢,这回答了我的大部分问题。但是我理解要做到这一点,您必须编写类似于这样的内容:bar(function(){//code});。有没有任何方法可以这样做:bar({//code}); - Kevin Pei
谢谢,好的,那就这样解决了。非常感谢你的帮助!我会在可以的时候将你的答案标记为正确答案。 - Kevin Pei

1
在JavaScript中,函数就是一个变量,你提到的代码:
$(document).ready( function () {//code});

实际上是声明了一个没有名称的函数,然后将其作为参数传递给 "ready()"。 因此,您可以通过这种方式将代码传递给函数

frameworkname( {} );

非法,因为“{}”是代码块而不是任何类型的“变量”


2
这不是非法的。它只是传递了一个空对象。同时,您似乎混淆了变量和值/对象。 - user395760

1
在 JavaScript 中,变量可以表示任何数据类型。因此,在 function frameworkname( x ) { } 中 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");
    }
});

0

我认为应该是这样的:

function frameworkname(){

  this.ready = function(code){
      code();
  };
  return this;
}

frameworkname().ready(function(){
  console.log('Function executed'); 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接