Вопрос

У меня есть следующий фрагмент JS

var Customer : function()
{
    this.ShipProduct : function()
    {
       //Logic for shipping product. If shipping successful, notify user
       //Here I am trying to call Notify
       //this.Notify(); // does not work
    }

    this.Notify = function()
    {
      //Logic for notify
    }
}

Как бы я позвоню уведомил от ShipProduct?

Это было полезно?

Решение

Это не js, это набор синтаксических ошибок.

Использовать = при назначении переменных и : Внутри простых объектов не путайте простые объекты и функции, не забывайте запятые и не префиксируйте имена свойств с this..

var Customer = {
    ShipProduct : function()
    {
       //Logic for shipping product. If shipping successful, notify user
       //Here I am trying to call Notify
       this.Notify(); // this does work
    },
    Notify: function()
    {
      //Logic for notify
    }
}

Customer.ShipProduct();

Другие советы

Этот пример выглядит хорошо, кроме первой строки, что толстая кишка должна быть равным знаком.

Проблема, я думаю, связан с тем, как вы звоните ShipProduct. Отказ Если вы делаете это так, все должно работать:

var customer = new Customer();
customer.ShipProduct();

Однако, если вы отсоединять Способ и назвать его напрямую, он не будет работать. Такие как:

var customer = new Customer();
var shipMethod = customer.ShipProduct;
shipMethod();

Это связано с тем, что JavaScript полагается на Accessor точечно-адреса связывать this. Отказ Я предполагаю, что вы передаете метод вокруг, возможно, обратный вызов AJAX или что-то в этом роде.

Что вам нужно сделать в этом случае, он обернет его в функции. Такие как:

var customer = new Customer();
var shipMethod = function() {
    customer.shipMethod();
};
... later, in some other context ...
shipMethod();

Это, кажется, работает:

<html>
<head>
<script type = "text/javascript" language = "JavaScript">
var Customer = function(){
    this.ShipProduct = function(){
        alert("hey!");
        this.Notify();
    };

    this.Notify = function(){
      //Logic for notify
        alert("notify");
    };
};
</script>
</head>
<body>
<script type = "text/javascript" language = "JavaScript">
var cust = new Customer();
cust.ShipProduct();
</script>
</body>
</html>

Как насчет:

var Customer = function() {
    var notify = function() {
        ...
    };
    var shipProduct = function() {
        ...
        notify(...);
        ...
    };
    return {
        notify: notify,
        shipProduct: shipProduct
    };
}

Это предполагает, что вы хотите разоблачить обе функции - если notify используется только Customer Внутренне, тогда нет необходимости выставлять его, поэтому вы вместо этого вернулись так:

    return {
        shipProduct: shipProduct
    };
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top