JavaScript объекты - PullRequest
       1

JavaScript объекты

0 голосов
/ 28 мая 2011

Я хочу создать несколько объектов, которые являются локальными для определенной функции, но я хочу, чтобы другая функция выполняла функции помощника. Назначение вспомогательной функции - уменьшить количество дублирующегося кода (в конечном итоге будет создано много объектов в ходе выполнения скрипта).

Я «выкинул» свой скрипт, убедился, что он работает, а затем скопировал / вставил его ниже. Работает функция с именем 'foo' (для вызова jQuery / ajax не показан php-файл). Однако я хочу, чтобы вызов ajax находился в функции getNode (вспомогательной функции) и, предпочтительно, в настройке временного объекта также в getNode. Я думаю, что временный объект может быть передан в foo из getNode.

<script type="text/javascript"> 
    function Node() {
        this.nodeId;
        this.type;  //can be used for diferent shapes, color cobinations, etc.
        this.text;
    }

    function getNode(id){
        $.post("updateDB.php", send, function(theResponse){ 
            var responseArray = theResponse.split(',');
            ....?
    }

    function foo(id){
        var centerNode = new Node();
        var send = 'id=' + id + '&action=getNode';
        $.post("updateDB.php", send, function(theResponse){ 
            var responseArray = theResponse.split(',');
            centerNode.nodeId = responseArray[0];
            centerNode.type = responseArray[1];
            centerNode.text = responseArray[2];         
            alert('nodeId' + centerNode.nodeId);
            alert('node type' + centerNode.type);
            alert('node text' + centerNode.text);
        });                 
    }
</script>
</head>
<body>
 <a onclick="foo(5)">test</a>
</body>

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Одним из способов было бы обеспечить обратный вызов getNode:

function getNode(id, callback){
    $.post("updateDB.php", send, function(theResponse){ 
        var responseArray = theResponse.split(',');
        var node = new Node();
        node.nodeId = responseArray[0];
        node.type = responseArray[1];
        node.text = responseArray[2];         
        callback(node);
    });
}

РЕДАКТИРОВАТЬ: «Как будет foo будет настроен?»

Так, в примере, foo должен реагировать на событие click, получая объект узла и затем оповещая его данные.Это мое понимание.Если getNode были определены, как указано выше:

function foo(id) {
  getNode(id, function(node) {
    alert('nodeId' + node.nodeId);
    alert('node type' + node.type);
    alert('node text' + node.text);
  }
});
0 голосов
/ 28 мая 2011

Хорошо сводя ваш вопрос к основам (я хочу, чтобы локальные переменные были доступны в отдельных функциях):

  1. Вы можете передавать объекты вспомогательной функции.
  2. Выможет создать класс и поместить в него обе функции и сделать локальные функции глобальными для класса.

Это единственные способы, которые я могу себе представить на данный момент.

JS Classesпример:

function ClassName(vars){
    //This is used to init the class and is called when you use var myClass = new ClassName();
    //example: this.varName = this.functionName();
    //Instead of using prototype (will see latter in this example) you could just define the function/vars in here like (which would make them private to this class):
    //this.functionName = function(vars){};
}

ClassName.prototype.functionName = function(vars){}  //Out hear makes these var/functions publicly accessible
ClassName.prototype.varName = 5;

А затем использовать его:

var myClass = new ClassName(vars);
myClass.functionName(vars);

Поэтому поместите ваши локальные переменные и вспомогательную функцию в конструктор, чтобы сделать их приватными, а другую функцию в качестве прототипа длясделать его общедоступным.

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