var: Eigenschaftszuweisung an Objekt

Hallo miteinander!

Mich würde mal interessieren, ob es möglich ist, in Javascript einem Objekt einen Stapel Eigenschaften irgendwie über eine Schleife zuzuweisen, statt jede Zuweisung einzeln zu notieren.

Nehmen wir als Beispiel mal ein WebGL-Programm-Objekt, an welches ich in JavaScript die unter Umständen recht zahlreichen attributes und uniforms des zugehörigen Shader-Codes als Eigenschaften anknüpfen möchte, um damit arbeiten zu können.

Bisher sieht das bei mir so aus:


function initShaderProgram ( ) {

  shaderProgram.aVertexPosition = gl.getAttribLocation(shaderProgram, 'aVertexPosition');
  shaderProgram.aVertexNormal = gl.getAttribLocation(shaderProgram, 'aVertexNormal');
  shaderProgram.aVertexColor = gl.getAttribLocation(shaderProgram, 'aVertexColor');
  shaderProgram.aTextureCoord = gl.getAttribLocation(shaderProgram, 'aTextureCoord');

  // ...

  shaderProgram.uProjectionMatrix = gl.getUniformLocation(shaderProgram, 'uProjectionMatrix');
  shaderProgram.uWorldMatrix = gl.getUniformLocation(shaderProgram, 'uWorldMatrix');
  shaderProgram.uNormalMatrix = gl.getUniformLocation(shaderProgram, 'uNormalMatrix');

  // ...

  shaderProgram.uUseLighting = gl.getUniformLocation(shaderProgram, 'uUseLighting');
  shaderProgram.uUseTexture = gl.getUniformLocation(shaderProgram, 'uUseTexture');
  shaderProgram.uAmbientColor = gl.getUniformLocation(shaderProgram, 'uAmbientColor');

  // ...

  shaderProgram.uUniformColor = gl.getUniformLocation(shaderProgram, 'uUniformColor');
  shaderProgram.uAlpha = gl.getUniformLocation(shaderProgram, 'uAlpha');
  shaderProgram.uSampler = gl.getUniformLocation(shaderProgram, 'uSampler');

}

Irgendwie sehr unhandlich und sehr unschön, wie ich finde. Ich meine, wenn man sich die Gleichförmigkeit der Anweisungen anschaut, schreit das doch geradezu nach Vereinfachung!

Aber wie könnte man das bewerkstelligen?

Falls jemand eine Idee hat, wie man diesen Textblock zusammenfassen könnte, wäre ich sehr dankbar...

Beste Grüße,

var

  1. Mich würde mal interessieren, ob es möglich ist, in Javascript einem Objekt einen Stapel Eigenschaften irgendwie über eine Schleife zuzuweisen, statt jede Zuweisung einzeln zu notieren.

    function initShaderProgram ( ) {
    
      shaderProgram.aVertexPosition = gl.getAttribLocation(shaderProgram, 'aVertexPosition');
      shaderProgram.aVertexNormal = gl.getAttribLocation(shaderProgram, 'aVertexNormal');
      shaderProgram.aVertexColor = gl.getAttribLocation(shaderProgram, 'aVertexColor');
      shaderProgram.aTextureCoord = gl.getAttribLocation(shaderProgram, 'aTextureCoord');
    
    Array("aVertexPosition", "aVertexNormal", "aVertexColor", "aTextureCoord" usw).forEach(function (eigenschaft) {
        shaderProgram[eigenschaft] = gl.getAttribLocation(shaderProgram, eigenschaft)
    });
    
  2. Tach!

    Mich würde mal interessieren, ob es möglich ist, in Javascript einem Objekt einen Stapel Eigenschaften irgendwie über eine Schleife zuzuweisen, statt jede Zuweisung einzeln zu notieren.

    Auf die Eigenschaften eines Objekts kann man auf (mindestens) zwei Weisen zugreifen: foo.bar und foo['bar'].

    dedlfix.