Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.04.2013, 20:46
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

а, не думал, что там про это, тогда вопрос исчерпан ^^'
__________________
.ня
Ответить с цитированием
  #12 (permalink)  
Старый 08.04.2013, 06:40
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Запилил метод .instsanceOf
a.instanceOf( B );
(думаю, можно не описывать, что он делает).

Сделал небольшую замену для MyClass.prototype.method.apply( this, arguments );

Она не так хорошо выглядит, как у devote (я так понимаю, ты как-то декорировал методы?), зато реализация выглядит сильно проще. Моего ума пока не хватило сделать нормальный, не зацикливающийся parent (this.parent.method()).

A = Class({
   method: function() {}
});

B = Class({
  method: function() {
    B.parent.method( this );
  }
});


Чтобы вызвать метод родительского класса пишем имя текущего класса (указывать в методах название родительского класса — совсем некрасиво, но своего — уже лучше), свойство parent, имя метода, аргументы:
1. this - обязательно
2. arguments или любые аргументы
Можно написать так:
B.parent.method( this, arguments );

а можно и так:
B.parent.method( this, 1, 2, 3, 4, 5 );
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #13 (permalink)  
Старый 08.04.2013, 06:52
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от melky
а если собрать экземпляры в массив?
console.log = function() {}; x = {}; console.time( '1' ); for( var i = 0; i < 100000; i++ ) x[ i ] = new C; console.timeEnd( '1' )
Миллион инстанцов сожрали около гига, сто тысяч сожрали, ожидаемо, 100 мегабайт. Не знаю, хорошо это или плохо, но совет очевиден: не создавайте больше 100 тысяч инстанцов, 100 мегабайт для осла не так уж и много
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #14 (permalink)  
Старый 08.04.2013, 06:53
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от tenshi
почему нет стирания XDR свойств?
На них можно повесить геттер и вернуть undefined, но они всё равно будут перечисляться.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #15 (permalink)  
Старый 08.04.2013, 10:10
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

FINoM, ну, лучше уж только перечисляться, чем еще и что-то возвращать

как тебе такой вариант?

var B= Class(function( proto ){
    proto.define( 'foo', function( ){ return 1 } )
    proto.override( 'bar', function( return 2 } )
})


define - создаёт свойство, но бросает исключение, если такое уже есть
override - перегружает свойство предка, но бросает исключение, если такого нет

ну и расширять тут можно:
defineGetter, overrideGetter
defineSetter, overrideSetter
и так далее
__________________
.ня
Ответить с цитированием
  #16 (permalink)  
Старый 08.04.2013, 16:09
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от tenshi
как тебе такой вариант?
Предполагатся, что разработчик сделает всё что желает. В моей хернюшке только самый необходимый минимум. Если программист хочет расширить количество методов, он просто создаёт свой главный класс, от которого наследуются другие:
MainClass = Class({
  define: function() {/* ... */},
  override: function() {/* ... */}
  /* ... */
});

A = Class({
  'extends': MainClass 
   /* ... */
});

То же самое касается и этого:
Сообщение от tenshi
ну, лучше уж только перечисляться, чем еще и что-то возвращать
Навешивание аксессоров занимает, пускай не большое, количество ресурсов. Если разработчик хочет, может сам это сделать. Но если ему это не нужно, то и незачем тратить процессорное время и память (пускай и мизерные количества).
MainClass = Class({
  initMainClass: function() {
    // можно перечислить все семь свойств и вернуть в геттере undefined,
    // а можно и перечислить всего три (которые не null) и вернуть null
    var badProps = [ 'contentType', 'timeout', 'responseText' ];
    for(var i = 0; i < badProps.length; i++ ) {
      Object.defineProperty( this, badProps[ i ], { get: function() { return null; }});
    }
  }
})
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #17 (permalink)  
Старый 08.04.2013, 17:19
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

не, ты не понял, у меня эти методы расширяют прототип, а не экземпляр

а пример, не о том, вот правильный:

var A= Class(function( proto ){
    proto.define( 'foo', function( ){ return 1 } )
})
var B= Class(function( proto ){
    proto.mixin( A )
    proto.override( 'foo', function( base, 1 ){
        return base() + 1
    } )
})
__________________
.ня
Ответить с цитированием
  #18 (permalink)  
Старый 09.04.2013, 22:50
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от tenshi
не, ты не понял, у меня эти методы расширяют прототип, а не экземпляр
Прототип не наследуется, а копируется в XDR. Хотя я всё равно не очень понял, что ты хочешь этим самым получить.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #19 (permalink)  
Старый 10.04.2013, 12:12
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

вот это:
proto.override( 'foo', function( base, 1 ){
        return base() + 1
    } )

перегруженный метод передаётся в качестве первого параметра
__________________
.ня
Ответить с цитированием
  #20 (permalink)  
Старый 11.04.2013, 01:32
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от tenshi
перегруженный метод передаётся в качестве первого параметра
Ты имеешь в виду вариант, как сделать parent?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Асинхронное программирование - реализация функции для "синхронизации" function Общие вопросы Javascript 8 22.06.2012 13:52
Изменить стиль внутри элемента с определнным id, только для браузера ie8 ansi_str Общие вопросы Javascript 4 03.05.2012 14:11
Реализация игрового поля для игры "Точки" last-art Events/DOM/Window 7 22.04.2012 03:18
Что такое class и для чего они нужны нуб Общие вопросы Javascript 6 29.11.2011 23:31
Свойство display: none для строк в таблице под IE8 vatar Internet Explorer 9 29.09.2011 14:47