代码之家  ›  专栏  ›  技术社区  ›  Tahir Hassan

javascript:$$global变量被认为是邪恶的?

  •  1
  • Tahir Hassan  · 技术社区  · 14 年前

    这些天我写了很多javascript代码,我很好地利用了jquery。我想知道是否认为创造 奇怪的 全局变量名。我知道很多javascript框架,比如jquery,都使用美元字符; $ ,但这大大简化了代码,因为它可以做很多事情。

    我正在考虑创造一个 $$ 我的代码中的全局变量定义如下:

    function $$(tagName) 
    { 
        return $('<' + tagName + ' />'); 
    }
    

    这样做的好处是,我的代码(1)抽象出了创建新元素的逻辑,(2)使代码更加简洁,最后(3)我几乎可以在javascript中像html本身一样简洁地创建html元素,因为jquery还有许多其他的选择器要链接:

    $$('div').attr( { id : 'myDiv', 'class' : 'MyDivClass' }).append(
        $$('ul').append(
            $$('li').text('first'),
            $$('li').text('second'),
            $$('li').text('third')
        );
    );
    

    你相信以上的创造方法吗 $$ 是合法的还是你认为这是不可以的?

    5 回复  |  直到 14 年前
        1
  •  2
  •   InvisibleBacon    14 年前

    这当然是一个意见,但如果我是你的应用程序新手,我将不得不去看看该函数做什么,以了解代码。而且,这个函数非常简单,其他开发人员可能不会费心使用它,因此您最终会得到一个令人困惑的混合技术。真的,这很糟糕吗?

    $('<div/>').attr( { id : 'myDiv', 'class' : 'MyDivClass' }).append(
        $('<ul/>').append(
            $('<li/>').text('first'),
            $('<li/>').text('second'),
            $('<li/>').text('third')
        )
    );
    
        2
  •  2
  •   Jan    14 年前

    我更喜欢 清晰、有意义、自我记录 jquery样式上的名称 $ 一年中的任何一天。

    同样,我发现同一个名字根据它所使用的上下文有不同的含义,这让我很困惑。喜欢 $ 在jQuery中 this 在javascript中,我会尽量避免使用它们。

    编辑:在我看来,应该由用户来决定是否要为他使用的框架使用一个速记名称。它只需要一行代码:

    var $ = jQuery;
    

    当我查看包含jquery的页面时,我看到的只是一大堆美元符号,它们在不同的地方做着不同的事情。如果图书馆为其提供的功能使用了有意义的名称,那么破译其他人的代码就会容易得多。javascript作为一种语言本身已经很难理解了。

        3
  •  1
  •   Andrzej Doyle    14 年前

    就我个人而言,我不认为它添加了那么多功能来解释“名称空间污染”,更不用说人们在阅读您的代码时可能会对您的方法感到困惑。

    它只是在每次调用该方法时保存了一些微不足道的字符,因此在这方面它只能被视为一种语法糖。在我看来,弊大于利。

        4
  •  1
  •   Dr.Molle    14 年前

    如果你看一下jquery的结构会很好。 它不能处理多个全局变量/函数,只需要一个全局对象“jquery”。 其他的都是这个对象的属性,所以它们有最小化的命名冲突。

    在$$的特殊情况下:有时可能需要使用prototypejs,但不能使用,因为prototypejs已经使用$$。

    所以我的建议是:创建一个全局对象,你自己的“库”,给它一个不同的名字,让你的函数/变量成为这个对象的成员。

        5
  •  0
  •   Pointy    14 年前

    我不认为它是“邪恶”的,但是如果你想在全局名称空间中弹出一个“杰出”的名字,如果它是一个更有趣的名字可能会更好。出于您的目的,考虑到您的示例代码,jquery微模板系统可能是更好的方法。