2015-01-05 2 views
-1

Как я могу автоматически запускать функцию при вызове объекта каждый раз?Как я могу запускать функцию автоматически при вызове объекта каждый раз?

У меня есть следующий объект:

var myObject = { 

    main: function(e) { 
     //main 
    }, 
    x: 1, 
    y: 2, 
    another: function(e) { 
     //another 
    } 
} 

Можно ли достичь ниже функциональности?

Вызов

myObject(); 

бы вызвать метод main.

Но вызов

myObject().another(); 

называют бы метод another.

использование только myObecjt() не myObecjt.main()

+1

Это не совсем понятно, что вы имеете в виду под «использованием в качестве основной функции». – JJJ

+0

Формулировка этого вопроса очень трудно понять. Возможно, вы обнаружите, что получите дополнительную помощь, если объясните, что вы пытаетесь сделать немного больше. –

+3

Величины колебаний являются реальными. – Nit

ответ

2

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

var myObject = (function() { 
    var t = {}; 
    t.main = function() { 
    console.log("main"); 
    }; 
    t.another = function() { 
    console.log("another"); 
    }; 
    t.main(); 
    return t; 
}); 

Это приведет к следующим функциям:
Вызов myObject(); вызовет метод main.
Вызов myObject().another(); вызовет как методы main, так и another.

+0

Обратите внимание, что это приведет к утечке 'main' и' another' в виде глобальных (http://jsfiddle.net/jwz7L98t/) или ошибки в строгом режиме (http://jsfiddle.net/e6Lv3c2h/), поскольку 'this' будет либо ссылаться на глобальный объект, либо быть 'undefined', соответственно. –

+0

да, это я хочу. Спасибо! – Rmm

+1

@JonathanLonowski Спасибо, что указали это, исправлено. – Nit

2

если вы ищете JQuery, как цепочки попробовать что-то вроде этого

function myObject(){ 
    if(this == window){ 
     return new myObject(); 
    } 
    //whatever the main method does 
    return this; 
} 
myObject.prototype.x = 1; 
myObject.prototype.y = 2; 
myObject.prototype.another = function(){ 
    //whatever the another method does 
    return this; 
} 

что-то вроде этого, рекомендовал бы исследовать метод цепочку и прототипичное наследование, для чистой Aplication этого.

или для чего-то более простого

function myObject(){ 
    //whatever the main method does 
    return myObject; 
} 
myObject.x = 1; 
myObject.y = 2; 
myObject.another = function(){ 
    //whatever the another method does 
    return myObject;//method chaining may continue 
} 
Смежные вопросы