2016-06-21 14 views
0

Ich habe einige Code hereWarum funktioniert dieser Code nicht?

verspottet
var common = common || {}; 

(function(NAMESPACE) { 

    NAMESPACE = { 
    isIE: function() { 
     return true; 
    } 
    }; 

    main(); 

})(common); 

function main() { 
    console.log(common.isIE()); 
    return 'Hello, World!'; 
} 

ich ein paar Dinge verstehen möchte,

1) Warum nicht das funktioniert, ich denke, es hat etwas mit, wie zu tun hat Scoping ist "entschieden" und IIFE, aber nicht ganz sicher.

2) Wie funktioniert dieser Code?

+0

Was versuchen Sie zu erreichen? –

+0

@ JesperHøjer Nun, die Hiife oben stellt meine Hilfsfunktionen, die in einem Leben verpackt sind, und wenn ich versuche, auf die Funktionen außerhalb zugreifen, bekomme ich eine Fehlermeldung, dass 'common.isIE' ist undefined –

+0

Weil Sie nichts hinzufügen auf das "gemeinsame" -Objekt? –

Antwort

5

common die als Argument mit dem Namen NAMESPACE übergeben wurde, muss erweitert werden, anstatt einen neuen Wert zuzuweisen.

So Object.assign kann hier helfen.

var common = common|| {}; 

(function(NAMESPACE) { 

    Object.assign(NAMESPACE,{ 
    isIE: function() { 
     return true; 
    } 
    }); 

    main(); 

})(common); 

function main() { 
    console.log(common.isIE()); 
    return 'Hello, World!'; 
} 
+0

Funktioniert' $ .Extend' auch? coz IE suppoer nicht 'Object.assign' noch –

+1

Ja, definitiv. – JagsSparrow

0

Wenn Sie ein Objekt als Argument in JS sind vorbei, sollten Sie daran denken, dass Sie „by-value“ der Verweis davon sind vorbei.

ein neues Objekt in wörtlicher Notation erstellen und es auf das Argument wie diese Zuordnung

NAMESPACE = { 
    isIE: function() { 
     return true; 
    } 
    }; 

kann das Argument auf das neue Objekt nur Punkt - nicht auf das Objekt der Referenz Sie durch das Argument übergeben.

Wenn Sie hatte gesagt,

NAMESPACE.isIE = function() {} 

würde es funktionieren.