Вход

Просмотр полной версии : обертка для создания классов не работает в ie8


tsigel
28.08.2013, 12:05
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"
Помогите починить, пожалуйста.

Яростный Меч
28.08.2013, 14:31
По невероятному стечению обстоятельств в IE8 есть дебаггер, который выскакивает принажатии кнопки F12. В нем и можно отследить, на какой строке вывалилась ошибка, чему были равны в этот момент переменные, и почему они оказались именно такимим.

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

Если лень считать, то 16-й символ указывает на "extends".

tsigel
28.08.2013, 14:49
Переписал так:
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 отличается в серверной и не серверной ОС?