Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   своё замыкание каждому объекту. (https://javascript.ru/forum/misc/12103-svojo-zamykanie-kazhdomu-obektu.html)

Kolyaj 30.09.2010 17:59

cainrus,
не хотите делать так, как принято в языке, на котором пишете, можете просто игнорировать мои сообщения.

cainrus 30.09.2010 18:07

Sweet,
pointer теперь в зоне видимости и к нему открытый доступ через
FirstObject.pointer

cainrus 30.09.2010 18:13

Kolyaj:
Вы говорите не о том как принято в языке, а о том как удобно разработчикам, потому что Вам не нравятся какие-то "костыли".
в php тоже были костыли для нереализованных возможностей языка, затем некоторые костыли реализовали.
А в javascript слово private зарезервировано для будущего использования, т.е. это говорит о том, что возможно это когда-то будет реализовано и принято.

Sweet 30.09.2010 18:25

Цитата:

Сообщение от cainrus
pointer теперь в зоне видимости и к нему открытый доступ через FirstObject.pointer

Это вполне очевидно:) Я и не понял по-началу, что этого не должно быть:) Это объясняет затеяние:D

Sweet 30.09.2010 18:47

Вот, навскидку:
Object.prototype.key = (function(){
  var storage = [], _undefined;
  return function(value){
    if(value!=_undefined){
      for(var i=0; i<storage.length; i++)
        if(storage[i].object==this){
          storage[i].value = value;
          return value;
        }
      storage.push({object:this,value:arguments[0]});
      return value;
    }
    for(var i=0; i<storage.length; i++) if(storage[i].object==this) return storage[i].value;
    return _undefined;
  }
}())

var FirstObject = {}, SecondObject = {};
FirstObject.key(100);
SecondObject.key(999);

alert([FirstObject.key(), SecondObject.key()]);

cainrus 30.09.2010 19:17

Sweet:
Удивляюсь как вы до этого дошли. Работает так как требовалось. Первоначально я всего лишь хотел реализовать функционал для массива как в php: next, prev, current, end, reset, key. Всё застопорилось, когда я обнаружил, что внутренний указатель во всех массивах везде одинаков.

рони 01.10.2010 10:46

Sweet,
Вопрос а если value = 0 ? FirstObject.key(0)=null а надо наверно FirstObject.key(0)=0.
Вопрос к желающим как правильно сделать проверку наличия агрумента у функции?

Sweet 01.10.2010 11:44

Цитата:

Сообщение от рони
Вопрос к желающим

??? К Каким желающим?:)
Цитата:

Сообщение от рони
как правильно сделать проверку наличия агрумента у функции?

Проверить свойство arguments.length либо typeof arguments[0] != 'undefined'.

Kolyaj 01.10.2010 12:24

Цитата:

Сообщение от Sweet
Проверить свойство arguments.length либо typeof arguments[0] != 'undefined'.

Никаких либо.

http://alljs.ru/articles/undefined.html#args

Sweet 01.10.2010 12:56

Цитата:

Сообщение от Kolyaj
Никаких либо.

Почему так категорично?:) Я специально сделал именно typeof != 'undefined', потому что в данном случае по-моему неоправданным считать 'undefined' за аргумент. Ведь это же не хранилище неопределенности:)


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