【问题标题】:Constants as input to a function in JavaScript?常量作为 JavaScript 函数的输入?
【发布时间】:2012-02-08 18:06:08
【问题描述】:

在我的js文件中说我想要的

var NO = 0;
var YES = 1;

function doYouLikeCake(answer){}

当从另一个文件调用 doYouLikeCake 时,我希望能够输入 YES 或 NO,但如果这些变量是在 js 文件中定义的,我不知道该怎么做。这可能吗?

编辑:不要介意 HTML 位。不,没有按钮。我正在尝试创建一个库,并希望对其进行简化,以便库的用户只需编写 doYouLikeCake(YES) 而不必自己定义 YES/NO。

【问题讨论】:

  • "从 html 文件调用" - 你的意思是属性处理程序,例如 onclick="..."
  • 我猜你的 html 文件中有一些按钮?如果是这样,那么您应该使用 true 表示是,使用 false 表示否:例如:
  • 将其称为onclick="doYouLikeCake(NO)"。这会将 0 传递给函数的 answer 参数。
  • 然后在它自己的函数中你可以做 if(answer){//its true some code}else{//its false do this code}
  • 那么你的问题是什么?你的用户可以写 doYouLikeCake(YES)...

标签: javascript html constants user-input


【解决方案1】:

是的,您可以这样做:

<input type="submit" onclick="doYouLikeCake(YES);" value="Yes">
<input type="submit" onclick="doYouLikeCake(NO);" value="No">

<script>

    var NO = 0;
    var YES = 1;

    function doYouLikeCake(answer) { 
        //... 
    }

</script>

【讨论】:

  • 尽量少使用全局变量。
  • 提问者想要常量。全局变量最适合模拟这种行为。不过,没有评论他是否应该首先这样做。
  • 当然不是。常量当然与命名空间无关。他们不在乎它们是全局变量还是绑定到本地命名空间。正如我所说,应该尽量减少全局变量的使用。因此,建议将常量分配给自己的命名空间:APP.YES = true;,然后是onclick="APP.doYouLikeCake( APP.YES )"
【解决方案2】:

样板将是...

(function () {

    var YES = true;
    var NO = false;

    // All your JavaScript code here

}());

因此,您希望将“常量”放在命名空间中,这可以通过 IIFE(如我上面的示例)或 DOM-ready 处理程序来实现。您的所有代码都应驻留在该命名空间内,以确保您的“常量”可用于您的代码。


顺便说一句,您可以通过创建不可写属性来创建实常数:

Object.defineProperty( APP, 'YES', {
    value: true,
    enumerable: true
});

其中APP 是常量的命名空间。

【讨论】:

    【解决方案3】:

    这是我上面评论中的示例:http://jsfiddle.net/vhQ8T/

    【讨论】:

      【解决方案4】:

      如果您的变量是在 js 文件中定义的,则需要从脚本中动态更新 html 元素。

      例如,这可能是您的 html:

      <input type="radio" name="YesOrNo" id="NO" value="PlaceHolderForNo" />NO
      <input type="radio" name="YesOrNo" id="YES" value="PlaceHolderForYes" />YES
      

      还有你的 js:

      var NO=0;
      var YES=1;
      
      var inputNO=document.getElementById("NO");
      var inputYES=document.getElementById("YES");
      

      // 这些是你的变量

      inputNO.value=NO; 
      inputYES.value=YES;
      
      inputNO.onclick=function(){doYouLikeCake(this.value);};
      inputYES.onclick=function(){doYouLikeCake(this.value);};
      

      活生生的例子:http://jsfiddle.net/WhHXK/

      【讨论】:

        【解决方案5】:

        为什么需要输入它们。只需引用它们,因为它们是在全局范围内声明的。

        function doYouLikeCake()
        {
            return YES;
        }
        

        【讨论】:

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