views:

118

answers:

1

I have the code below. I would like to have an array (buttons) with a single element pointing to the a function (closeFlag).

<script type="text/javascript">
    var closeFlag = new function() {
        alert('Clicked');
    }
    var buttons = {
        'OK': closeFlag
    }
</script>

However, when loading the page the alert immediately pops up. When the array is constructed, instead of using it as a pointer, JavaScript calls my function. Why? What mistake, misconception do I have?

+11  A: 

The new keyword, you will not need it.

<script type="text/javascript">
  var closeFlag = function() {
    alert('Clicked');
  }
  var buttons = {
    'OK': closeFlag
  }
</script>

What's happening in your code is that it's constructing the anonymous function then assigning the result of it (this) to closeFlag.

wombleton
Wow, I really missed on that.
sibidiba
The result of the construction of the anonymous function isn't `undefined`, is a newly created object (the `this` value inside the constructor function is returned implicitly)
CMS
Ugh, you're quite right. Don't use `new` much.
wombleton