18.09.2016, 14:33
Es nervt, es hält mich auf, und es ist peinlich: Immer noch kriege ich den IE nicht in den Griff.
Ich möchte ein Object aus einem anderen "erstellen", zur Minute ist es mir gerade egal ob es kopiert, vererbt oder ein prototype wird, in allen anderen Browsern funktionieren mehrere Möglichkeiten, im IE funktioniert gar nichts
Object.create : Argument ist nicht null und kein Object
Function.prototype : geht auch irgendwie nicht, Object nicht erweiterbar
new Object
jQuery.extend
literal
...
geht alles irgendwie nicht?
Der IE 11 hat noch kein Proxy Objekt und benutzt das polyfile!?
Ich möchte ein Object aus einem anderen "erstellen", zur Minute ist es mir gerade egal ob es kopiert, vererbt oder ein prototype wird, in allen anderen Browsern funktionieren mehrere Möglichkeiten, im IE funktioniert gar nichts

Zitat:SCRIPT5007: Die Eigenschaft "__magic_proxy" eines undefinierten oder Nullverweises kann nicht abgerufen werden.
Cannot create proxy with a non-object as target or handler
Object.create : Argument ist nicht null und kein Object
Function.prototype : geht auch irgendwie nicht, Object nicht erweiterbar
new Object
jQuery.extend
literal
...
geht alles irgendwie nicht?
Der IE 11 hat noch kein Proxy Objekt und benutzt das polyfile!?
Code:
var _ObjectFlow = function()
{
var _Obj =
{
inherit : function($parent,_new)
{
var sup = $parent, base = _new;
var descriptor = Object.getOwnPropertyDescriptor(
base.prototype,"constructor"
);
base.prototype = Object.create(sup);
var handler =
Object.create({
constructor: function(target, args)
{
var obj = Object.create(base.prototype);
this.apply(target,obj,args);
return obj;
},
apply: function(target, that, args)
{
base.apply(that,args);
}
});
/*
if('function'===typeof Promise.polyfill)
{
var proxy = Object.create(sup, base);
}else
{
var proxy = new Proxy(base.prototype,handler);
}
*/
var proxy = new Proxy(base.prototype,handler);
descriptor.value = proxy;
try
{
Object.defineProperty(base, "constructor", descriptor);
}catch(err)
{
console.error(err);
}
return proxy;
},
extend : function(sup,base)
{
var descriptor = Object.getOwnPropertyDescriptor(
base.prototype,"constructor"
);
base.prototype = Object.create(sup.prototype);
var handler =
Object.create({
constructor: function(target, args)
{
var obj = Object.create(base.prototype);
this.apply(target,obj,args);
return obj;
},
apply: function(target, that, args)
{
sup.apply(that,args);
base.apply(that,args);
}
});
/*
if('function'===typeof Promise.polyfill)
{
var proxy =Object.create(sup.__proto__, base);
}else
{
var proxy = new Proxy(base,handler);
}
*/
var proxy = new Proxy(base,handler);
descriptor /* .value */ = proxy;
try
{
Object.defineProperty(base.prototype, "constructor", descriptor);
}catch(err)
{
console.error(err);
}
return proxy;
}
};
return _Obj;
};
var OverloadableObject = /* _ObjectFlow().inherit(_ObjectFlow, _ObjectFlow); */ _ObjectFlow;
OverloadableObject.prototype.__noSuchMethod__ = function(name, args)
{
if('function' === typeof this.__call)return this.__call(name, args);
console.warn('Method ' + name + ' of overloaded object and magic method __call is not defined!');
};
/*
var $FRDL = new OverloadableObject();
*/
var $FRDL = _ObjectFlow().inherit(OverloadableObject , function()
{
});
/**
* var t = frdl.overload({}); t.__call=function(name,args){alert(name);alert(JSON.stringify(args));}; t.hallo('welt')
*/
$FRDL.I = {
constructor : function(){
},
has: function(target, name)
{
return true;
},
get: function(target, name, receiver)
{
if (name in target.__proto__)
{
return target.__proto__[name];
}
if (name in receiver.__proto__)
{
return receiver.__proto__[name];
}
return function()
{
try
{
var args = Array.prototype.slice.call(arguments);
if( 'function' === typeof receiver.__call )return receiver.__call(name, args);
}catch(err)
{
console.error(err);
}
};
},
apply: function(target, THIS, args)
{
target.apply(THIS,args);
this.apply(THIS,args);
}
};
try{
$FRDL.IO = Object.create( {}, $FRDL.I);
$FRDL.IO.__magic_proxy = new Proxy(OverloadableObject, $FRDL.I);
}catch(err){
console.warn(err);
$FRDL.IO = $.extend($FRDL.I,{
__magic_proxy : new Proxy(OverloadableObject, $FRDL.I)
});
}