powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
25 сообщений из 50, страница 2 из 2
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825224
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут вот проблема возникла - расширить объект свойством из другого

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var o = {};
var o1 = {
  get age(){ return 21; },
}

o1.val = 10;
var age = o1.val; //-> 21

o[age] = o1[age];
o.age = 100;        //копируется не само свойство, а его значение
age = o.val;         //-> 100 Error!!



как скопировать свойство из одного объекта в другой?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825383
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp, простите, что за кусок говнокода Вы выложили? :)

[SRC JS]
var o = {};
var o1 = {
get age(){ return 21; },
}

o1.val = 10; // тут у объекта o1 появляется свойство val со значением 10
var age = o1.val; // тут значение свойства копируется в переменную age, это значение равно 10, к чему комментарий //-> 21 ?

o[age] = o1[age]; // здесь у объекта o появляется свойство с ключом 10 и значеним undefined, т.к. у o1 нет свойства с таким ключом
o.age = 100; // тут ни фига не копируется, а создаётся свойство age у объекта o со значением 100
age = o.val; // и наконец age получает значение undefined, т.к. у объетка o не определено свойство val

Вы хотите, чтобы у объектов o и o1 появилось статическое свойство val, или просто ссылку на один и тот же объект хотите присвоить?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825384
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил SRC:
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825385
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var o = {};
var o1 = {
get age(){ return 21; },
}

o1.val = 10; // тут у объекта o1 появляется свойство val со значением 10
var age = o1.val; // тут значение свойства копируется в переменную age, это значение равно 10, к чему комментарий //-> 21 ?

o[age] = o1[age]; // здесь у объекта o появляется свойство с ключом 10 и значеним undefined, т.к. у o1 нет свойства с таким ключом
o.age = 100; // тут ни фига не копируется, а создаётся свойство age у объекта o со значением 100
age = o.val; // и наконец age получает значение undefined, т.к. у объетка o не определено свойство val
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825428
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВы хотите, чтобы у объектов o и o1 появилось статическое свойство val, или просто ссылку на один и тот же объект хотите присвоить?Или тупо значение скопировать? :)
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825432
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

прошу прощение - не то скопировал

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var o = {};
var o1 = {
get age(){ return 21; },
}

o1.age = 10; 
var age = o1.age; //-> age = 21

o[age] = o1[age]; // здесь у объекта o появляется свойство age с cо значением 21, а не ссылка на свойство (как хотелось бы - ведь там же хэш, а хэши и массивы в JS передаются по ссылке)

o.age = 100; // тут значение 21 заменяется на 100
age = o.age; // и наконец age = 100;
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825461
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp, воспользуйтесь что-ли файрбагом, или чем другим :)

Из этого:
Код: javascript
1.
2.
3.
4.
o[age] = o1[age]; // здесь у объекта o появляется свойство age с cо значением 21, а не ссылка на свойство (как хотелось бы - ведь там же хэш, а хэши и массивы в JS передаются по ссылке)

o.age = 100; // тут значение 21 заменяется на 100
age = o.age; // и наконец age = 100;


Только последний комментарий верный.

1. У объекта не появляется свойства age со значением 21, а появляется свойство 21 со значением undefined;
2. Значение 21 не заменяется на 100, а у объекта o появляется свойство age с cо значением 100.

И ответьте на вопрос: Вам статическое свойство нужно, или ссылка на один и тот же объект?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825462
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается что inherited accessor properties - это геттеры и сеттеры, объявленные как

Код: javascript
1.
2.
3.
4.
var obj = {
  get prop(){ return this_prop; }
  set prop(val){ this_prop = val; }
};



по скорости доступа не уступают обычным свойствам объявленным

Код: javascript
1.
2.
3.
4.
var obj = {
  get_prop: function(){ return this_prop; }
  set_prop: function(val){ this_prop = val; } 
};



а свойства объявленные через

Код: javascript
1.
2.
3.
4.
5.
var obj = {};
Object.defineProperty(obj, 'prop', {
  get: function(){ return this_prop; }
  set: function(val){ this_prop = val; } 
});



минимум в 20 раз медленнее в доступе вышеуказанным методам объявления свойств
Т.к. приходится производить операции "наследования" и расширения прототипов на ходу - уж очень хочется расширять объекты 2м методом из других объектов!
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825466
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы уже к точкам придираетесь! :) смысл же понятен!!

Код: javascript
1.
2.
3.
o['age'] = o1['age'];
или так
o.age = o1.age;
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825470
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправленному верить! "уж очень хочется расширять объекты 2м методом из других объектов!"

читать как

"уж очень хочется расширять объекты 1м методом из других объектов!"
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825525
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так ни фига и не понял :)
Вы хотите скопировать свойства из одного объекта в другой, при этом если меняем свойства у одного объетка, то они меняются и у другого?

Или Вы хотите некий метод типа defineProperty?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37825526
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp, может Вам сюда: ООП в Javascript: наследование ? Там и про extend (расширение) есть :)
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37826270
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAsp, может Вам сюда: ООП в Javascript: наследование ? Там и про extend (расширение) есть :)

ООП с наследованием у миня есть - со всеми классическими плюшками :) мне нужны проперти!
Мне нужно к существующему объекту добавить accessor properties!
К новому конструируемому - все понятно сам умею (в книжке прочитал), а вот к существующему!?
Как?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37826290
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Классами и наследованием балуюсь с самого появления Prototype.js
Мне нужны свойства как для краткости записи так и для банального предотвращения неумышленного изменения юзерами свойст классов.
Соглашения об именованиях и правилах работы с членами классов - они для джентельменов и тех кто их читает.
Но у нас жентельменов мало :) - толи недоучились то ли в лом, но на практике юзеры нашего кода всегда что-то важное да и сломают!
Да и в конце-концов - себя хочется уважать - не писать километровые аксессоры и писать как нормальный человек :)
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37826382
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37826564
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В контексте ООП хотелось бы реализовать эти свойства в классах

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var Somthing = Class.create({
  ...
  get prop1(){ return ... this._prop1; }
  set prop1(value){ ...  this._prop1 =  value; } 
  ...

  init: function{
    this.prop1 = ...;
  },
 
});



соответственно эти свойства надо перенести из хэша-описателя класса в прототип класса
при этом возможно и дополнение свойств прототипа класса по ходу программы:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
Somthing.extend({
  ...
  get prop2(){ return ... this._prop2; }
  set prop2(value){ ...  this._prop2 =  value; } 
  .....

});



т.е. Somthing.prototype уже существует и чем-то заполнен и к нему надо добавит свойство prop2
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37827581
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что можно тупо свойства скопировать:
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37827583
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <script>
      var one = {
        	_name: 'Vasya',
        	get name() { return this._name; },
        	set name(value) { this._name = value; }
          },
          two = {};
        
      for (var key in one) {
        two[key] = one[key];
      }
        
      alert('Two is: ' + two.name);
        
      two.name = 'Petya';
              
      alert('One is: ' + one.name);
      alert('Two is: ' + two.name);
    </script>
  </body>
</html>


Или допилить Class.extend().
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37827832
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

а теперь гляньте на свойство two

<!DOCTYPE HTML>
<html>
<head> </head>
<body>
<script>
var one = {
_name: 'Vasya',
get name() { return this._name; },
set name(value) { this._name = value; }
},
two = {};

for (var key in one) {
two[key] = one[key];
}

two.name = 'Petya';

var descriptor = window.Object.getOwnPropertyDescriptor(one, 'name');
alert('descriptor: ' + descriptor.get);

var descriptor = window.Object.getOwnPropertyDescriptor(two, 'name');
alert('descriptor: ' + descriptor.value);

</script>
</body>
</html>​

Мы видим что это не то свойство с геттером и сеттером которое хотелось бы нам иметь !)
Как допилить extend?
Касаясь данного примера - как после алертов добавит в one еще какое-нибудь свойство с геттером и сеттером ?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37827834
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения - забыл тег форматирования кода поставить (
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37828093
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прочитал MDN - там сказано что добавить к существующему объекту свойства можно только через __defineGetter__/__defineSetter__ или Object.defineProperty - что резко увеличивает время доступа к свойствам от 20 до 80 раз!! печально....
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37830019
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spМне нужны свойства как для краткости записи так и для банального предотвращения неумышленного изменения юзерами свойст классов.


Код: javascript
1.
2.
obj.setImportantProperty(5);
obj.ImportantProperty = 5;



Экономия невероятная.
Ну что защита в обоих случаях реализуется идентично - тоже вроде очевидно (вопрос только во внешнем виде доступа). Чем так противен внешний вид функционального доступа - так и осталось непонятным. И стОило тратить время на тестирование альтернативных ЯКОБЫ более феншуйных вариантов?
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37830434
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon,

тем что банальное присваивание

Код: javascript
1.
obj.setImportantProperty = 5;



поломает всю работу! :)
а юзеры так и норовят таки так написать, то-ли по забывчивости то-ли очепятовшись
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37832147
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spEdd.Dragon,

тем что банальное присваивание

Код: javascript
1.
obj.setImportantProperty = 5;



поломает всю работу! :)
а юзеры так и норовят таки так написать, то-ли по забывчивости то-ли очепятовшись
Ну сорри, таким юзерам - хоть в 100 раз медленнее - побоку. Ты вылизываешь сутками какую-то безделушку. А этот юзверь не долго думая соорудит иррациональную архитектуру своей задумки, которая положит четырехядерник. Не доступом к свойствам, а идиотизмом.

Т.е. если это расчитано на эстетов, а не на профессионалов, то плевать на производительность ДОСТУПА К СВОЙСТВУ - это время всяко ничтожно по сравнению с остальными операциями.

Если ж цель - максимальная эффективность во всех слоях приложения, то плевать на тех, кто не в состоянии понять, как используются методы и их клинит после безуспешной попытки выполнить obj.setImportantProperty = 5.

Ну не вижу я пересечений этих двух множеств, хоть каплю стоящзих внимания. Исключения может быть какие-то - один на миллион талантище, но упертый фанат Дельфи и ненавидит всякое setBlahblah().
...
Рейтинг: 0 / 0
JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
    #37833359
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon,

в общем согласен, хотелось и красиво и быстро))
но думаю что мои изыскания кому-нибудь пригодятся, чтобы не гадать - стоит или не стоит использовать свойства))
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS: Какой метод работает быстрее: назначенный ч/з obj.prototype или Object.defineProperty?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]