Вызов одного метода из другого в JS - PullRequest
0 голосов
/ 21 августа 2010

У меня есть следующий фрагмент 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?

Ответы [ 4 ]

8 голосов
/ 21 августа 2010

Это не 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();
1 голос
/ 21 августа 2010

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

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

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

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

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

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

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

var customer = new Customer();
var shipMethod = function() {
    customer.shipMethod();
};
... later, in some other context ...
shipMethod();
1 голос
/ 21 августа 2010

Это похоже на работу:

<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>
0 голосов
/ 21 августа 2010

Как насчет:

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

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

    return {
        shipProduct: shipProduct
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...