es gelöst, es stellt sich native Funktionen muss aus Fenster Kontext aufgerufen werden, so dass ich die Funktionen in Fenster beendet Bindung und Doppel-Prototyping zu tun wie das, was folgt:
function define(w){ // for testing I use requirejs define instead
window.Test123=w;
}
(function(){
function WBase(){
for(var i in window){
if(typeof window[i]=='function'){
this[i]=window[i].bind(window);
}
}
}
WBase.prototype=window;
function W(){
var w=this;
Object.defineProperty(this,'window',{configurable:true,enumerable:true,writable:false,value:w});
}
W.prototype=new WBase();
define(function(){
var windowAlias=new W();
return (function(window){
var ret={}; // returns only the variables added to the alias window object
with(window){
// CODE FROM MODULE HERE WILL HAVE an alias to "window" wich means if it adds variables to window (global scope) it will be prevented and instead added to the alias window
for(var i in window){
if(window.hasOwnProperty(i)&&i!='window')
ret[i]=window[i];
}
}
return ret;
}).call(windowAlias,windowAlias)
});
})();
Test123(); // for testing
Versuchen Sie, jquery anstelle eines Kommentars einzufügen (// CODE VON MODUL HIER ...), Sie erhalten ein Objekt mit den Eigenschaften jQuery und $ und sie werden nicht zum globalen Bereich hinzugefügt. und ich habe am Ende eine Seite erstellt, die diese Zeilen dynamisch an Javascript-Dateien anfügt, die durch querystring angefordert werden.
Warum erstellen Sie immer Objekte, die vom Fenster erben? – evolutionxbox
WTH versuchst du zu tun? 'setTimeout' muss in einer' Window'-Instanz aufgerufen werden, bei einem 'W'-Objekt funktioniert es nicht. – Bergi
@Bergi Ich habe versucht, Bibliotheken zu kapseln, die AMD/requires nicht unterstützen und den globalen Raum verschmutzen. Ich wollte, dass sie ein Fensterobjekt haben, das sie verschmutzen können, aber nicht das reale Fensterobjekt und gleichzeitig, wenn sie Fenster in ihrem Code verwenden (wie window.setTimeout etc ...) wollte ich auch, dass es weiter so arbeitet gewöhnlich. Bitte sehen Sie meine Antwort –