Призывая один метод от другого в js
-
30-09-2019 - |
Вопрос
У меня есть следующий фрагмент 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
};