【问题标题】:Javascript oop basics [duplicate]Javascript oop基础[重复]
【发布时间】:2012-05-28 10:44:55
【问题描述】:

可能重复:
$(document).ready shorthand

谁能帮我理解下面的JS代码,拜托:

$(function(){  <-- Is this a JS constructor? Why we need this?
    var someVariable = $(".classa").on('click', function() { <-- At what point in time does someVariable get populated?
        var $this = $(this);
            id = $this.attr('id');
         someVariable.removeClass('selected'); 
    });

    var someVariable2 = $(".classb").on('click', function() {
        var $this = $(this);
            id = $this.attr('id');
         someVariable2.removeClass('selected');
    });
});

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    $ 不是 js 构造函数。它是 jquery(js library) 函数。变量在声明时填充。

    【讨论】:

    • 实际上,变量在声明时填充(在 document.ready 事件内)。
    • @rcdmk 谢谢;固定。
    【解决方案2】:

    $ 是函数的名称。您将在其中传递一个匿名函数作为其第一个参数。如果我们要降低它的复杂性,它会是这样的:

    var $ = function( arg1 ){
      /* Internals */
    };
    

    如果我们现在调用它,它将如下所示:

    $("foo");
    

    在这段代码中,"foo" 是我们的第一个参数。现在假设我们用另一个函数替换了 "foo"

    var callback = function(){
      alert("Hello World");
    };
    

    如果我们将它传递给我们的$ 函数,它将如下所示:

    $( callback );
    

    但是我们真的不需要使用命名函数,我们可以使用匿名函数:

    $(function(){
      alert("Hello World");
    });
    

    开始看到相似之处?在$ 生命周期的某个时刻,它将决定执行我们传入的函数。在它执行之前,我们的函数什么都不做。

    现在我们在这里讨论 jQuery,只要 DOM 准备好,jQuery 就会执行该函数。所以我们传递的代码应该在 DOM 准备好时执行。

    【讨论】:

    • 如果您提到 $(...) 在这种情况下是 $(document).ready(...) 的简写,这会更有帮助。
    • 另外,忘了提到变量是在声明时填充的(在 document.ready 事件内,带有一个 jQuery 对象,表示具有类 classa 的元素集合。
    • @configurator 和@rcdmk 如果我要介绍$ 移动的方式,这篇文章可能会变得更长。我故意尽量减少。
    • @JonathanSampson 谢谢,我们怎么称呼 :$(function(){ alert("Hello World"); });
    • @nilpun - 如果你有 N 个 var $=function(){...},你正在做的是重复重新分配 $ 以引用不同的函数 - 它只引用最后一个指定的函数,所以 $() 执行最后一个分配的功能。 (这与 jQuery 中的 $() 函数的用途不同。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多