Frage

1) Im folgenden code, was ist die Argumentation hinter machen gameOfLive eine variable, und nicht nur function gameOfLife()?

2) Was ist gol?Es scheint wie ein array, aber ich bin nicht vertraut mit der syntax oder was seine genannt.

Ich studiere http://sixfoottallrabbit.co.uk/gameoflife/

if (!window.gameOfLife) var gameOfLife = function() {

    var gol = {
        body: null,
        canvas: null,
        context: null,
        grids: [],
        mouseDown: false,
        interval: null,
        control: null,
        moving: -1,
        clickToGive: -1,
        table: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(''),
        tableBack: null,

        init: function(width, height) {
            gol.body = document.getElementsByTagName('body')[0];
            gol.canvas = document.createElement('canvas');
            if (gol.canvas.getContext) {
                gol.context = gol.canvas.getContext('2d');
                document.getElementById('content').appendChild(gol.canvas);
                gol.canvas.width = width;
                gol.canvas.height = height;
                gol.canvas.style.marginLeft = "8px";

                gol.control = document.getElementById('gridcontrol');

                gol.canvas.onmousedown = gol.onMouseDown;
                gol.canvas.onmousemove = gol.onMouseMove;
                gol.canvas.onmouseup = gol.onMouseUp;

                gol.addGrid(48,32,100,44,8);

                gol.refreshAll();
                gol.refreshGridSelect(-1);
                gol.getOptions(-1);

                gol.genTableBack();
            } else {
                alert("Canvas not supported by your browser. Why don't you try Firefox or Chrome? For now, you can have a hug. *hug*");
            }
        },
    }
}
War es hilfreich?

Lösung

var gameOfLife = function() { }

ist ein Funktionsausdruck, wobei

function gameOfLife() { }

ist ein Funktion Erklärung.

Zitat Juriy 'kangax' Zaytsev über Funktions-Ausdrücke vs.Funktions-Deklarationen:

Es gibt einen subtilen Unterschied in Verhalten von Deklarationen und Ausdrücke.

Erste von alle, Funktionsdeklarationen analysiert und ausgewertet, bevor Sie irgendwelche andere Ausdrücke sind.Auch wenn Erklärung positioniert sich zuletzt in einem Quelle, es wird bewertet vor allem andere Ausdrücke enthalten in einem Rahmen.[...]

Andere Eigenschaft-Funktion Erklärungen ist, dass, wenn diese bedingt ist die nicht standardisierte und variiert in verschiedenen Umgebungen.Sie sollten niemals verlassen sich auf Funktionen erklärt wird, bedingt und verwenden Funktion Ausdrücke statt.

In diesem Fall, als Joel Coehoorn erwähnt in einem Kommentar, gameOfLife definiert ist, bedingt ist, so ist es notwendig, eine Funktion Ausdruck.

Eine Allgemeine Verwendung für diesen Fall bedingt definierten Funktionen zu verbessern JavaScript-Funktionen im Browser, die keine native Unterstützung für die neueren Funktionen (nicht verfügbar in früheren ECMAScript/JavaScript-Versionen).Sie wollen nicht, dies zu tun mit Funktion Erklärungen, wie diese überschreibt die native Funktionalität sowieso, das ist wahrscheinlich nicht das, was Sie wollen (unter Berücksichtigung der Geschwindigkeit, etc.).Eine kurze Beispiel wie diese:

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(item, from) {
        /* implement Array.indexOf functionality,
           but only if there's no native support */
    }
}

Ein wesentlicher Nachteil der Funktion von Ausdrücken ist, dass Sie in der Tat weisen Sie eine anonyme Funktion an eine variable.Dies kann machen Debuggen schwieriger, wie der name der Funktion ist normalerweise nicht bekannt, wenn die Skript-Ausführung wird angehalten (z.B. auf einen von Ihnen gesetzten breakpoint).Einige JavaScript-Debugger wie Firebug, versuchen zu geben Sie den Namen der variable, die der Funktion zugewiesen wurde, aber, da der debugger hat diese Vermutung durch Analyse der script-Inhalte on-the-fly, dies kann zu schwierig sein (die Ergebnisse in einem (?)() gezeigt wird, anstelle der Funktion name) oder sogar falsch sein.

(für Beispiele, Lesen Sie weiter auf der Seite, wenn der Inhalt nicht ganz für Anfänger geeignet)

Andere Tipps

  1. In JavaScript sind Funktionen first-class-Objekte.Sie könnten Sie in speichern von Objekten (Variablen), und übergeben Sie als Argumente an Funktionen.Jede Funktion ist eigentlich eine Function Objekt.

  2. gol ist ein Objekt, das initialisiert wird mit der Objekt-literal notation.


1) Im folgenden code, was ist die Argumentation hinter machen gameOfLive eine variable und nicht nur eine "Funktion gameOfLife()"?


Die Variablen definiert, auf globaler Ebene sind die Mitglieder des window-Objekts.Also, indem es eine variable, die Sie machen es möglich, verwenden Sie die syntax window.gameOfLife().Das ist auch der Grund, warum Sie verwenden können die if (!window.gameOfLife) überprüfen Sie zu Beginn Ihres snippet.

Aber das spielt auch nicht wirklich erklären, warum Sie wählte, es zu tun auf diese Weise, und eine Funktion Erklärung würde das gleiche tun. Marcel Korpel Antwort besser erklärt das "warum" der beiden Optionen.


2) was ist gol?Es scheint wie ein array, aber ich bin nicht vertraut mit der syntax oder was seine genannt.


Die syntax ist, heißt compact object notation.Was macht es interessant ist hier, dass der "compact" - Objekt deklariert wird innerhalb einer Funktion.Deklarieren Sie ein Objekt innerhalb einer Funktion wie das ist nützlich, weil Sie können es verwenden, um bauen Sie javascript-Objekte mit (effektiv) private Mitglieder.

Der Schlüssel ist, sich daran zu erinnern, dass die Funktionen und Objekte in javascript sind die gleiche Sache.Damit die volle gameOfLife() Funktion ist wirklich ein Objekt definition.Außerdem, die gol Objekt deklariert, als ein Mitglied der gameOfLife ist wahrscheinlich Teil eines gemeinsamen Verfahren für die Definition der privaten Mitglieder.Die gameOfLife() Funktion/Objekt zurückgeben gol Objekt.Alle anderen Artikel erklärt innen der gameOfLife() Funktion/Objekt effektiv zu privaten Mitglieder der zurückgegeben gol Instanz, während alles erklärt inneren des gol Objekt selbst ist public.Was Sie wirklich wollen, zu tun ist, schließlich schreiben Sie code wie diese:

var game = new gameOfLife();

Nun, wenn Sie tun, das Spiel variabel zu halten eine gol Objekt.Die Methoden in diesem Objekt haben weiterhin Zugriff auf Elemente deklariert, in die vollen gameOfLife() Funktion, aber auch andere code nicht (zumindest nicht so einfach).Also, diese Elemente effektiv sind privat.Elemente in der gol Objekt selbst noch die öffentlichkeit.So haben Sie ein Objekt mit sowohl privaten und öffentlichen Mitgliedern für die ordnungsgemäße Kapselung/information hiding, gerade wie Sie möchten bauen, mit anderen Objekt-orientierten Sprachen.


Putting eine Funktion in einer Variablen, Sie können kommen später entlang und ersetzen Sie durch eine andere Funktion ersetzt die Funktion transparent für den rest Ihres Codes.Dies ist die gleiche Sache, die Sie tun, wenn Sie angeben "onClick=" auf ein Formular-widget.

sicher:erläutern die syntax:

Funktionen sind erstklassige Objekte in javascript, so können Sie eine Funktion in einer Variablen.so ist der größte Teil dieses Codes ist in der Tat die definition einer Funktion gespeichert in var gameOfLife, die später verwendet werden, durch aufrufen von:

gameOfLife()

gol ist ein Objekt (hash), und "init" ist ein weiteres Beispiel für die oben genannten syntax, außer dass Sie direkt in die "init" - Taste in der "gol" hash.so dass Funktion wiederum könnte aufgerufen werden, indem Sie:

gol["init"](w,h)

Nach diese Seite, Deklaration gameOfLife in Ihrer Art nicht anders aus, er erklärt es Ihr Weg.Die Art und Weise, die Sie definieren gol macht es ein Objekt (oder Sie können denken, es als ein assoziatives array).Eine ähnliche Verknüpfung für arrays ist die Verwendung von eckigen Klammern anstelle von geschweiften Klammern.

Angesichts einer Funktion als variable kann nützlich sein, wenn Sie möchten, dass eine Funktion eine Eigenschaft eines Objekts.(Siehe: http://www.permadi.com/tutorial/jsFunc/index.html)

Ich glaube gol ist ein JavaScript-Objekt beschrieben in name/Wert-Paaren-ähnlich wie das JSON-format.(Siehe: http://www.hunlock.com/blogs/Mastering_JSON_(_JavaScript_Object_Notation_))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top