MyGlobalObject;
function TheFunctionICanUseRightAwaySingleForAllInstansesAndWithoutInstanse() {
function() {
alert('NO CONSTRUCTOR WAS CALLED');
}
};
Функция с длинными именами должна быть вызвана из MyGlobalObject
, которая в свою очередь должна быть доступна как глобальная (до window
) переменная во все времена после загрузки script. Он должен поддерживать расширяемость в соответствии с последними стандартами.
Я нахожусь в архитектурной дилемме о том, как создать базу JS для приложения (почти 100% JS).
Нам нужен объект i.e. window.MyObject
(например, модуль, например jQuery), поэтому
Он может быть создан с помощью
VAR1
var MyGlobalObjConstructor = function(){
this.GlobalFunctionInObject = function(){
alert('called with MyGlobalObj.GlobalFunctionInObject()');
}
};
window.MyGlobalObj = new MyGlobalObjConstructor();
Является ли MyGlobalObj
расширяемым? Могу ли я создать дочерние объекты, которые наследуют текущее состояние MyGlobalObj
(расширенные функции/свойства MyGlobalObj.NewFunc
например.)? В чем основное отличие использования прототипа (VAR3)?
Под GlobaldFunction
Я имею в виду один экземпляр для всех инициализированных/инстанцированных (возможно, экземпляров) экземпляров..
Или с помощью
VAR2
var MyGlobalObj = {
GlobalFunctionInObject: function...
GlobalFunctionInObject2: function...
};
MyGlobalObj.GlobalFunctionInObject();
// here I lose all hierarchy elements, no prototype,
// can I use GlobalFunctionInObject2 in GlobalFunctionInObject?
Или с помощью
VAR3
var MyGlobalConstuctor = function(){} // already 'well-formed' object
MyGlobalConstuctor.prototype.GlobalFunctionInObject = function...
};
var MyGlobalObj = new MyGlobalConstuctor();
// so I'm sceptical to NEW, because I have ALREADY wrote my functions
// which I expect to be in memory, single instance of each of them,
// so creating MyObject2,3,4 with NEW MyGC() makes no sense to me.
// DO I REALLY HAVE TO USE "MyGlobalConstuctor.prototype." FOR EACH FUNCTION?!!!!
Какая разница определяет MyGlobalObj
как функцию и как объект (результат func или VAR2)?
ИЛИ VAR4?
Я вижу в Отладчике Chrome как прототип, так и __proto__
специальные поля. Я читал, что это нормально, но почему они не сохраняются в одном прототипе?
Итак, каков правильный/оптимальный способ реализации window.MyObject
, поэтому можно было бы MyObject.MyFunction();
В чем отличия (pro/contra) вариантов 1 2 и 3?