【问题标题】:Pass code as function argument in javascript?在javascript中将代码作为函数参数传递?
【发布时间】:2011-09-11 15:07:37
【问题描述】:

我正在尝试自己创建一个 javascript 框架(所以请不要使用 jquery、mootools... 代码)并且我想让我的框架的代码只能在框架函数中访问,例如,像这样:

frameworkname({
//framework code here
});

所以我的框架代码不会与其他框架冲突。我知道frameworkname({}); 是一个函数,但我不知道您如何将代码作为函数参数传递。我知道这是可能的,因为我在 jquery 方面非常有经验,而且 jquery 到处都有这些东西(例如:$(document).ready(function(){//codehere});),但是 jquery 开发人员是如何做到这一点的呢?我希望能够为我的框架做到这一点。任何帮助是极大的赞赏。

【问题讨论】:

  • 不能只看jQuery源码吗?
  • 天哪,现在这是一个误解......我开始同情那些抱怨使用 jQuery 做所有事情的人。

标签: javascript frameworks


【解决方案1】:

函数是 JavaScript 中的第一类对象。您可以像传递字符串、数字、数组或任何其他数据类型一样传递它们。

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

【讨论】:

  • 谢谢,这回答了大部分问题。但我知道要做到这一点,你必须写这样的东西:bar(function(){//code});。有没有办法做到这一点:bar({//code});
  • 谢谢,很好,回答了这个问题。感谢所有的帮助!我会尽快将您的答案标记为答案
【解决方案2】:

在javascript中,函数就是一个变量,你提到的代码:

$(document).ready( function () {//code});

实际上是声明了一个没有名称的函数,然后将其作为参数传递给“ready()”。 因此,您的头脑中的密码以发挥作用的方式

frameworkname( {} );

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

【讨论】:

  • 这并不违法。它只是传递一个空白对象。此外,您似乎将变量与值/对象混淆了。
【解决方案3】:

在 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");
    }
});

【讨论】:

    【解决方案4】:

    我认为是这样的:

    function frameworkname(){
    
      this.ready = function(code){
          code();
      };
      return this;
    }
    
    frameworkname().ready(function(){
      console.log('Function executed'); 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多