Просто из любопытства, есть ли какая-то особая причина, по которой у вас есть отдельный метод init?
Функция, которая определяет ваш «класс», называется «конструктором», и вы можете просто выполнить настройку там. Если вы хотите «переинициализировать» объект, то это может быть полезно, но, похоже, здесь не годится.
Например:
// You might as well start wrapping your code now:
var myExample = (function myExample () {
// A common convention is to start the name of constructors with a
// capital letter, one reason is it help makes it more obvious
// when you forget the new keyword...Whether you use it or not
// is up to you. Also note, calling it "MyClass" is a little
// misleading because it's not a "class" really. You might
// confuse yourself if you think of it as a class too much.
// If you're wondering why I put the name twice, it's because
// otherwise it would be an anonymous function which can be
// annoying when debugging. You can just use var MyClass = function () {}
// if you want
var MyClass = function MyClass(a, b, c) {
// This will set each parameter to whatever was provided
// or if nothing is provided: null. If you leave out
// the || "" part then any
// time a value is not provided the parameter will
// return "undefined". This may be what you want in some cases.
this.param1 = a || "";
this.param2 = b || "";
this.param3 = c || "";
};
// likewise it's convention to start most variables/functions lowercase
// I think it's easier to type/looks better, but do as you please.
MyClass.prototype.print = function print() {
alert(this.param1 + '-' + this.param2 + '-' + this.param3);
};
var myObject = new MyClass();
myObject.print();
}());
"Упаковка" -
(function () {
//your code here
}());
Здесь в основном бессмысленно, но это то, с чем вам придется начать в конечном итоге, так что лучше начать прямо сейчас. Это только один способ «обернуть» и другие.
По сути, способ написания вашего сценария: если пользователь запускает другой сценарий с функцией MyClass, он может перезаписать ваш или наоборот, вызывая проблемы.
«Обертка» удерживает все это в пределах этой функции. Если вам нужно сделать что-то доступное для посторонних вещей, вы можете открыть это.
за комментарий:
Вы можете получить доступ к функциям и переменным изнутри оболочки, выставив их снаружи следующим образом:
var myApp = (function myApp(){
// The constructor for our "class", this will be available from outside because
// we will expose it later
var myClass = function(){
//code to set up "class" etc
// See how we can use private function within myApp
privateFunction();
};
// Here we set up the private function, it will not be available outside myApp
// because will will not expose it
var privateFunction = function(){ };
// Another public function that we will expose later
var otherPublic = function(){};
//now we expose the stuff we want public by returning an object containing
// whatever it is we want public, in this case it's just myClass and otherPublic
return { myClass: myClass, otherPublic: otherPublic };
}());
Обратите внимание, что в этом примере мы просто выставляем конструктор, если вам нужен экземпляр объекта
вам нужно собрать их в переменную и выставить эту переменную, например:
var theInstance = new myClass();
return { theInstance : theInstance };
Теперь он будет доступен вне myApp как myApp.theInstance
Вы также можете использовать более простую схему упаковки:
var myApp = {
myClass: function(){
//if we want to call another function in myApp we have to do it like so:
myApp.publicFunction();
},
publicFunction: function(){},
someString: "this is a string"
};
Там myApp - это просто объектный литерал, содержащий ваши функции и т. Д. Основное отличие состоит в том, что ВСЕ в myApp может быть доступно извне через myApp.name или myApp [name];