Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2013, 12:05
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

обертка для создания классов не работает в ie8
var Class = (function () {

    var constructor = function (options) {
        if (options.extends) {
            var parent = options.extends.prototype;
        }

        var constructor = options.hasOwnProperty('constructor') ?
            options.constructor : (parent ? function () {
            parent.constructor.apply(this, arguments);
        } : function () {
        });

        if (parent) {
            var fn = function () {
            };
            fn.prototype = parent;
            constructor.prototype = new fn();
            constructor.prototype.constructor = constructor;
        }

        if (options.static) {
            for (var i in options.static)
                constructor[i] = options.static[i];
        }

        for (var i in options)
            if (i != 'static' && i != 'constructor' && i != 'extends')
                constructor.prototype[i] = options[i];

        constructor.extend = function (options) {
            options.extends = this;
            return new Class(options);
        }

        return constructor;
    }

    var prototype = constructor.prototype;
    return constructor;
})();


Не работает в ие 8. Ругается "Предполагается наличие идентификатора Class.js, строка 4 символ 16"
Помогите починить, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2013, 14:31
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

По невероятному стечению обстоятельств в IE8 есть дебаггер, который выскакивает принажатии кнопки F12. В нем и можно отследить, на какой строке вывалилась ошибка, чему были равны в этот момент переменные, и почему они оказались именно такимим.
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2013, 14:46
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

По невероятному стечению обстоятельств в IE8 есть *много ненармотивной лексики* дебаггер, чьи свойства оставляют желать лучшего. "Предполагается наличие идентификатора Class.js, строка 4 символ 16" - строка из дебагера. При попытке поставить точку остановки он говорит что данный код ему не доступен. О.о

Если лень считать, то 16-й символ указывает на "extends".
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2013, 14:49
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Переписал так:
var Class = (function() {

	var constructor = function( options ) {

		if( typeof options['extends'] != 'undefined'  ) {
			var parent = options['extends'].prototype;
		}

		var __constructor = options.hasOwnProperty('constructor') ?
			options.constructor : (parent ? function() {
			parent.constructor.apply( this, arguments );
		} : function() {});


		var constructor = function() {

			if (options.defaults) {
				for (var i in options.defaults) {
					this[i] = options.defaults[i];
				}
			}

			__constructor.apply(this,arguments);
		}




		if( parent ) {
			var fn = function() {};
			fn.prototype = parent;
			constructor.prototype = new fn();
			constructor.prototype.constructor = constructor;
		}

		if( options.static ) {
			for( var i in options.static )
				constructor[i] = options.static[i];
		}

		for( var i in options )
			if( i != 'static' && i != 'constructor' && i != 'extends' )
				constructor.prototype[i] = options[i];


		constructor.extend = function( options ) {

			options['extends'] = this;

			return new Class( options  );
		}

		return constructor;
	}


	return constructor;

})();


Удивительные результаты. В серверной ОС в IE8 не работает, а в обычной XP на том же браузере работает. Разве IE отличается в серверной и не серверной ОС?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
jQuery не работает ни в IE8 ни в Firefox Jon Events/DOM/Window 7 09.01.2010 23:39
Почему скрипт работает в IE6 и не работает в opera и IE8? msufx Javascript под браузер 6 18.09.2009 18:44
Не работает AppendChild для div, причём только в IE _Kpot_ Internet Explorer 5 12.02.2009 10:55
Либа для создания окон Кирпич Библиотеки/Тулкиты/Фреймворки 8 25.06.2008 16:44