Как сделать вызов методов и переменных скрипта через переменную.
Привет.
Допустим есть такая функция в файле 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, время: 00:45. |