2017-01-05 60 views
0

這裏是我的代碼部分:遷移所有的類變量,以「本」

class Light { 
     constructor(xpos,zpos,ypos,range,diffuser,diffuseg,digguseb,intensity,angle,exponent) { 
      this.xpos = xpos; 
      this.ypos = ypos; 
      this.zpos = zpos; 
      this.range = range; 
      this.diffuser = diffuser; 
      this.diffuseg = diffuseg; 
      this.diffuseb = diffuseb; 
      this.intensity = intensity; 
      this.angle = angle; 
      this.exponent; 
[...] 

有沒有辦法將所有定的參數變量this所以我以後可以訪問它們?

var lt = new Light(0,12,15,...); 
alert(lt.zpos); //outputs '12' 

我正在尋找一個解決方案,把那些11個this行一個

+1

你說的是變量對象的範圍..你可以舉一個例子用嗎..是什麼問題? – Pogrindis

+0

我想縮短代碼,使其運行速度更快。我不希望所有的''這個*'在這裏,我只是要求一個方法把它放在一行 – Kajcioch

+0

但這就是爲什麼你把它放在構造函數中。所以沒有含糊之處,你只能寫它一次... – Pogrindis

回答

0

這確實你的願望。獲取參數名稱的mapArgsToThis中的部分取自heremapArgsToThis將是您想要懶惰時使用的幫助函數。

var mapArgsToThis = function(func, args, thisPointer) { 
 
    var argsStr = func.toString().match(/function\s.*?\(([^)]*)\)/)[1]; 
 
    var argNames = argsStr.split(',').map(function(arg) { 
 
    return arg.replace(/\/\*.*\*\//, '').trim(); 
 
    }).filter(function(arg) { 
 
    return arg; 
 
    }); 
 
    var argValues = Array.prototype.slice.call(args); 
 
    argNames.forEach(function(argName, index) { 
 
    thisPointer[argName] = argValues[index]; 
 
    }); 
 
}; 
 

 
var MyConstructor = function(xpos,zpos,ypos,range,diffuser,diffuseg,digguseb,intensity,angle,exponent) { 
 
    mapArgsToThis(MyConstructor, arguments, this); 
 
}; 
 

 
var myInstance = new MyConstructor(1,2,3,4,5,6,7,8,9,0); 
 

 
console.log(myInstance);

即使這是一個解決方案,我不建議這樣做。鍵入映射到您的this屬性的參數對您的手指非常有用,並且更易於其他人閱讀和了解正在發生的事情。它也不允許在分配到this之前對參數值進行任何處理。