Как сделать вызов методов и переменных скрипта через переменную.
Привет.
Допустим есть такая функция в файле blahblah.js:
(function(){
var m = 8;
function hi() {
alert('Here im');
}
})()
Есть *.html файл, куда предыдущий blahblah.js подключается: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> </head> <body> <script type="text/javascript" src="blahblah.js"> // Хочу вызвать фунцию hi() следующим образом. $BLAHBLAH.hi(); // А теперь изменим переменную m $BLAHBLAH.m = 5; </script> </body> </html> Хочу проводить все изменения со скриптом (вызов методов, переменных и т.д.) через свою переменную $BLAHBLAH. Такая фишка, например сделана в labJS, но я не понял как она там работает... |
(function(window){
var lib = {
a: 1,
b: function() {
alert(lib.a);
}
}
window.blahblah = lib;
})(window);
blahblah.a = 10;
blahblah.b();
|
devote, спасибо!
То, что нужно! |
можно написать с прототипами:
(function(window){
var lib = function( params ){
return lib.fn.init( params );
}
lib.fn = lib.prototype = {
constructor: lib,
init: function( params ) {
this.a = params || lib.a || this.a;
return this;
},
a: 1 // значение по умолчанию.
}
lib.fn.init.prototype = lib.fn;
lib.fn.show = function() {
alert( this.a );
return this;
}
window.blahblah = lib;
})(window);
blahblah().show(); // отображаем значение по умолчанию у нас стоит 1
blahblah.a = 10; // меняем значение по умолчанию на 10
blahblah().show(); // отображаем значение по умолчанию.
blahblah( 234 ).show(); // отображем значение 234
blahblah().show(); // значение по умолчанию не изменилось так же 10.
|
А если у меня будет несколько массивов объектов, а не только jsLoad?
И я хочу, что бы к ним была привязка через одну переменную blahblah. Получается, что остальные массивы мне нужно будет описывать в jsLoad, чтобы их вызывать? |
Цитата:
|
и что за jsLoad?
|
Цитата:
Объясню на примере. Сейчас window.blahblah = lib, то есть жестко привязана к
lib = {
// что то там...
}
А если у меня будет так:
lib = {
//что то там 1
};
superpuper = {
// что то там 2
};
imsuperman = {
// что то там 3
};
И ко всем этим трем словарям, я хочу обращаться через blahblah. Вопрос в том, как привязать все три (и больше) словаря к одной переменной. У меня есть такой вариант:
lib = {
superpuper : {
a:5
},
imsuperman : {
}
};
Обращаемся так: blahblah.lib.superpuper.a = 8; А хочется запись покороче... |
blahblah.superpuper = superpuper; blahblah.imsuperman = imsuperman; blahblah.superpuper.a = 8;а можно просто в библу blahblah добавить метод рассширения, например extend перед window.blahblah = lib; пишем такой код:
lib.extend = lib.fn.extend = function( obj1, obj2 ){
var target = obj2 ? obj1 : this,
source = obj2 || obj1;
for( var key in source ) {
target[ key ] = source[ key ];
}
return target;
}
ну и естественно вызов его будет таким:blahblah.extend( blahblah.extend( superpuper, imsuperman ) );и нам станут доступны свойства этих объектов прямо из объекта blahblah. |
Пока ждал Ваше сообщение, написал свой вариант:
superman = {
b : 5
};
supergirl = {
b : 9
}
var join = function(a,b){
for (key in a) {
if (key in b) {
continue;
}
b[key] = a[key];
}
}
join(superman,supergirl);
Ваше решение понравилось больше :victory: Спасибо за пример. Теперь это выглядит так:
var myobject = {};
myobject.extend = function(obj1, obj2, rewrite){
var
target = obj2 ? obj1 : this,
source = obj2 || obj1;
for(var key in source) {
if (!rewrite && key in target) { continue; }
target[key] = source[key];
}
return target;
}
В ходе работы возник вопрос, немного отдаляющий тему топика... Как можно сделать здесь приватные члены? |
| Часовой пояс GMT +3, время: 11:43. |