Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Приватные методы (https://javascript.ru/forum/misc/60637-privatnye-metody.html)

PashaKastyi 12.01.2016 14:16

Приватные методы
 
Добрый день, сразу скажу что новичок, у меня вот такой вопрос, как мне получить метод "пуш" из вне функции. Хорошим ответом так же сочту ссылку на литературу или статью, правда читал, но все равно не разобрался.
function Model() {

    var db = mongoDB();
    this.push = db.push(); // такой вызов не работает, пуш нет свойства или неопределена

    function mongoDB() {
        var push = function() {
            console.log('push to mongoDB')
        };
    }
}


var model = new Model();
model.push(); // ожидаю увидеть "push to mongoDB"

PashaKastyi 12.01.2016 14:25

Сделал такой вариант
function mongoDB() {

        return {
 push : function() {

            console.log('push to mongoDB')
                 }
        };

    }

будет ли он верным?

Keramet 12.01.2016 14:44

var Model = new function() {
		var db;
		this.setDB = function(val) {
			db = val;
		}
		this.getDB = function()	{
			alert(db); 
		}
	}
	
	Model.setDB("fffff");
	Model.getDB();

vasa_c 12.01.2016 14:45

в рамках ответа на вопрос "как мне получить push извне", да такой вариант будет верным. в чём вы сами могли бы убедиться.

в рамках же вопроса "зачем нужен этот говнокод", возможно ответ будет другим.

Keramet 12.01.2016 14:52

vasa_c,
:lol:

PashaKastyi 12.01.2016 15:14

Идея заключается в том, если мы перейдем на другую БД, то вместо переписывать всю модель, мы в переменную db = mongoDB() , просто поставим другую функцию, к примеру mySQL();
Модель имеет свойство push() , но как он будет реализован, будет описываться в каждой функции по разному, в зависимости с какой БД работаем

Decode 12.01.2016 15:49

Цитата:

Сообщение от PashaKastyi (Сообщение 403403)
Добрый день, сразу скажу что новичок, у меня вот такой вопрос, как мне получить метод "пуш" из вне функции. Хорошим ответом так же сочту ссылку на литературу или статью, правда читал, но все равно не разобрался.
function Model() {

    var db = mongoDB();
    this.push = db.push(); // такой вызов не работает, пуш нет свойства или неопределена

    function mongoDB() {
        var push = function() {
            console.log('push to mongoDB')
        };
    }
}


var model = new Model();
model.push(); // ожидаю увидеть "push to mongoDB"

function Model() {
  var db = mongoDB();
  this.push = db;

  function mongoDB() {
    return function() {
      console.log('push to mongoDB');
    };
  }
}

var a = new Model();
a.push();

ruslan_mart 12.01.2016 15:53

function Model() {
   this.db = new MongoDB();
};

function MongoDB() {
   //...
};
MongoDB.prototype.push = function() {
   console.log('push to mongoDB');
};


var model = new Model();
model.db.push();

Keramet 12.01.2016 15:55

var Model = new function() {
		var db;
		
		function mongoDB() {
			// что-то делаем с mongoDB
			db = 'connecting to mongoDB...';
		}
		function mySQL() {
			// что-то делаем с mySQL
			db = 'now connect to mySQL';
		}
		this.push = function(val) {
			if (val == 'mongoDB') mongoDB();
			if (val == 'mySQL') mySQL();
			alert(db);
		}
	}
	Model.push('mySQL');
	Model.push('mongoDB');


Часовой пояс GMT +3, время: 23:11.