2015-02-08 4 views
3
<script type="text/javascript"> 
    function CustomAlert() { 
     this.render = function() { 
      var winW = window.innerWidth; 
      var winH = window.innerHeight; 
      var dialogOverlay = document.getElementById('dialogOverlay'); 
      var dialogbox = document.getElementById('dialogbox'); 

      dialogOverlay.style.display = "block !important "; 
      dialogOverlay.style.height = winH+"px !important "; 
      dialogbox.style.left = (winW/2) - (550 * .5) + "px !important "; 
      dialogbox.style.top = "100px !important "; 
      dialogbox.style.display = "block !important"; 
     } 

     this.ok = function() { 
     } 
    } 

    function HighScore(arg) 
    { 
     CustomAlert().render(); 
    } 
</script> 

Почему это говорит мне, что CustomAlert не определено? Я также попытался назначить CustomAlert() для var, но затем консоль сообщает мне, что var теперь не определен.Почему мой вызов функции не работает?

ответ

5

Когда вы звоните как normal function (CustomAlert()), ваша функция ничего не возвращает. Однако вы можете вызвать его как constructor function (new CustomAlert()), используя оператор new при вызове вашей функции. Это приведет к this внутри функции, чтобы обратиться к экземпляру вновь созданного объекта и автоматически использовать этот экземпляр в качестве возвращаемого значения:

function HighScore(arg) 
{ 
    new CustomAlert().render(); 
} 

Альтернативой (но, конечно, не эквивалент) решение вернуть новое объект непосредственно из CustomAlert:

function CustomAlert() { 
    var obj = { 
     render: function() { 
      ... 
     }, 
     ok: function() { 
      ... 
     } 
    }; 

    return obj; 
} 

И теперь вы можете назвать это как если бы нормальная функция:

function HighScore(arg) 
{ 
    CustomAlert().render(); 
} 
2

Почему это говорит мне, что CustomAlert не определен? Я также попробовал , чтобы назначить CustomAlert() для var, но затем консоль сообщает мне, что var теперь не определен?

Потому что вы должны создать объект этого

var customerAlert = new CustomAlert(); 

, а затем вызвать метод render его.

Или в одном заявлении:

function HighScore(arg) 
{ 
    new CustomAlert().render(); 
} 

Это называется Конструктор Призвание Pattern.

На самом деле в функции JavaScript может быть вызван одним из следующих способов:

  • Метод вызова шаблона
  • Функция вызова шаблона
  • Конструктор призывание шаблон
  • Применить вызова шаблон

Метод Invocation pattern

Этот метод вызова используется, когда функция хранится как свойство объекта. Следовательно, мы называем эту функцию методом, как и в других объектно-ориентированных языках. Когда мы вызываем функцию, она привязана к этому объекту.Например:

var app = { 
    render: function() { 
       var winW = window.innerWidth; 
       var winH = window.innerHeight; 
       var dialogOverlay = document.getElementById('dialogOverlay'); 
       var dialogbox = document.getElementById('dialogbox'); 

       dialogOverlay.style.display = "block !important "; 
       dialogOverlay.style.height = winH+"px !important "; 
       dialogbox.style.left = (winW/2) - (550 * .5) + "px !important "; 
       dialogbox.style.top = "100px !important "; 
       dialogbox.style.display = "block !important"; 
     } 
     ok : function() { 

     } 
}; 

В этом случае мы будем называть render метод, как показано ниже:

app.render(); 

Функция Призвание Pattern

Это тот случай, когда функция не является собственностью объект. В этом случае функция привязана к глобальному объекту, который обычно является объектом окна в веб-приложениях.

var render = function(){ 
    var winW = window.innerWidth; 
       var winH = window.innerHeight; 
       var dialogOverlay = document.getElementById('dialogOverlay'); 
       var dialogbox = document.getElementById('dialogbox'); 

       dialogOverlay.style.display = "block !important "; 
       dialogOverlay.style.height = winH+"px !important "; 
       dialogbox.style.left = (winW/2) - (550 * .5) + "px !important "; 
       dialogbox.style.top = "100px !important "; 
       dialogbox.style.display = "block !important"; 
}; 

Тогда мы просто называем его, как показано ниже:

render(); 

Конструктор Призвание Pattern

Это тот случай, когда мы вызываем функцию с префиксом new. В этом случае будет создан новый объект. Это хороший способ создать объект с теми же свойствами. Эти функции называются конструкторами и by convention их имена начинаются с заглавной буквы.

Применить Призвание Pattern

Применить метод дает нам возможность construt массив аргументов, которые будут использоваться при вызове функции. Кроме того, он дает нам возможность выбирать значение this.

Для получения дополнительной информации о выше, пожалуйста, обратитесь к JavaScript: The Good Parts

+0

спасибо новобранца ошибки ... –

+0

@KevinAddison вы приветствуете чувак. Я рад, что помог! – Christos

Смежные вопросы