2013-11-24 4 views
0

как я могу достичь этого с помощью объекта, который имеет функции?javascript более глубокие функции объекта

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

как копать немного глубже ...

myobj.ONEFUNC=function(data1,data2){ 
    var DIFF=function(data3){ 
     /*In here I need to use data1, data2 & data3*/ 
     /*If this happens don't do normal*/ 
     /*maybe*/return; 
     } 
    /*do normal code things*/ 
    } 


myobj.ONEFUNC('data1','data2').DIFF('data3'); 

myobj.ONEFUNC('data1','data2'); 

ответ

1

Для того, что синтаксис вызова на работу, ONEFUNC должен возвращать функцию.

myobj.ONEFUNC=function(data1,data2){ 
    var DIFF=function(data3){ 
    /*In here I need to use data1, data2 & data3*/ 
    /*maybe*/return; 
    } 

    /*do normal code things*/ 

    return {DIFF: DIFF}; 
} 

«Если это произойдет, не делайте нормального», это не сработает. ONEFUNC запускает объект, содержащий функцию, которую вы хотите запустить, а затем запускается DIFF. Таким образом, DIFF работает только после ONEFUNC. Таким образом, вы не можете изменить то, как работает ONEFUNC, исходя из того, вы также звоните DIFF.


Возможно, вместо этого вы хотите цепочки? Цепочка означает, что каждая функция на ваших объектах возвращается сама, так что вы можете продолжать вызывать методы для этого объекта.

myobj = { 
    ONEFUNC: function(data1, data2) { 
    this.data1 = data1; 
    this.data2 = data2; 
    // other stuff 
    return this; 
    }, 

    DIFF: function(data3) { 
    this.data3 = data3; 
    alert(this.data1 + this.data2 + this.data3); 
    return this; 
    } 
}; 

mobj.ONEFUNC(1,2).DIFF(3); // alerts "6" 

Вы до сих пор не может изменить то, как ONEFUNC работает после того, как он бежал, хотя. Возможно, вам придется переосмыслить, почему вам нужно это ...

+0

, но если я не называю diff, когда я запускаю ONEFUNC, что происходит? –

+1

+1. Вы полностью согласитесь с исходной строкой: 'return {DIFF: DIFF};' поэтому вы можете использовать '.DIFF (..' –

+0

@AlexeiLevenkov nice catch, обновленный. –

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