JavaScript, эквивалентный из Python __ setitem __

У нас есть много приложение уровня с asp.net и интерфейсом winform, который также поддерживает дистанционную работу. У меня не было проблем с использованием никакого obfuscator за исключением типа шифрования, который генерирует загрузчик, который может быть проблематичным во всех видах неожиданных путей и просто не стоить того, по-моему. На самом деле мой совет был бы больше вроде, "Стараются не шифровать тип загрузчика obfuscators как эпидемия".:)

, По моему опыту, любой obfuscator будет хорошо работать с любым аспектом .net включая asp.net и дистанционную работу, просто необходимо стать близкими с настройками и изучить, как далеко можно продвинуть его в который области кода. И не торопитесь для попытки инженерного анализа на том, что Вы получаете и видите, как он работает с различными настройками.

Мы использовали несколько за эти годы в наших коммерческих приложениях и обосновались на Специях obfuscator с 9rays.net, потому что цена является правильной, она делает задание, и у них есть хорошая поддержка, хотя нам действительно не была нужна поддержка в годах больше, но быть честным я не думаю, что она действительно имеет значение, какой obfuscator Вы используете, проблемы и кривая обучения являются всеми одинаковыми, если Вы хотите иметь ее работа правильно с дистанционной работой и asp.net.

, Поскольку другие упомянули все, что Вы действительно делаете, эквивалент замка, не пуская в других отношениях честных людей и или делая его тяжелее для простой перекомпиляции приложения.

Лицензирование обычно является ключевой областью для большинства людей, и необходимо определенно использовать некоторую снабженную цифровой подписью систему сертификата для лицензирования так или иначе. Ваша самая большая утрата прибудет из случайного совместного использования лицензий, если Вы не будете иметь в распоряжении умную систему, люди, которые повреждают систему лицензирования, никогда не собирались покупать во-первых.

действительно легко взять это слишком далеко и оказать негативное влияние на Ваших клиентов и Ваш бизнес, сделать то, что просто и разумно, и затем не волнуйтесь об этом.

8
задан NVI 14 November 2009 в 11:37
поделиться

5 ответов

Нет, но есть планы по поддержке аналогичной функции в JavaScript 2. Следующий синтаксис объектного литерала был предложен для ошибки Mozilla 312116 , и кажется, что это может быть как это будет сделано для объектных литералов:

({
  get * (property) {
    // handle property gets here
  }
})

Я предполагаю, что set также будет поддерживаться (как set * (property, value) {...} ).

7
ответ дан 5 December 2019 в 05:56
поделиться

Можно ли реализовать поведение __setitem__ в JavaScript?

Нет. В JavaScript нет геттеров / сеттеров для произвольных свойств.

В Firefox вы можете использовать геттеры и сеттеры JavaScript 1.5+ для определения свойств x и y , которые возводят в квадрат свои значения при назначении, например :

var obj= {
    _x: 0,
    get x() { return this._x; },
    set x(v) { this._x=v*v; }
};
obj.x= 4;
alert(obj.x);

, но вам нужно будет заранее объявить установщик для каждого именованного свойства, которое вы хотите использовать. И он не будет работать в кросс-браузере.

10
ответ дан 5 December 2019 в 05:56
поделиться

вы можете сделать это (поскольку объекты в javascript также являются ассоциативными массивами):

var obj = {};
obj._ = function(key, value){
  this[key] = value * value;
}
obj._('x', 2);  // 4
obj._('y', 3);  // 9

alert(obj.x + "," + obj.y); //--> 4,9
5
ответ дан 5 December 2019 в 05:56
поделиться

Я не думаю, что вы можете переопределить оператор [] в текущей версии Javascript. В текущем Javascript объекты в основном представляют собой просто ассоциативные массивы, поэтому оператор [] просто добавляет пару ключ / значение к массиву, являющемуся объектом.

Вы можете написать методы, которые устанавливают определенные значения или даже возводят число в квадрат и добавляют значение в качестве пары ключ / значение, но не путем перегрузки оператора [].

Javascript2 имеет некоторые спецификации для перегрузки оператора, но это спецификация MIA.

1
ответ дан 5 December 2019 в 05:56
поделиться

В обычно реализуемых версиях Javascript нет настоящих сеттеров и получателей, поэтому, если вы хотите имитируя эффект, вы должны использовать другой синтаксис. Для свойства obj.x использование obj.x () для доступа к значению свойства и obj.x (123) для установки значения кажется как довольно удобный синтаксис.

Его можно реализовать так:

// Basic property class
function Property(value) {
   this.setter(value);
}

Property.prototype.setter = function(value) {
   this.value = value * value;
}

Property.prototype.getter = function() {
   return this.value;
}

Property.prototype.access = function(value) {
   if (value !== undefined)
      this.setter(value);
   return this.getter();
}


// generator function to add convenient access syntax
function make_property(value) {
   var prop = new Property(value);
   function propaccess(value) {
      return prop.access(value);
   }
   return propaccess;
}

Теперь свойства, генерируемые make_property , поддерживают желаемый синтаксис и присвоенные им квадратные значения:

var obj = {
   x: make_property(2)
};

alert(obj.x()); // 4
obj.x(3);       // set value
alert(obj.x()); // 9
5
ответ дан 5 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: