html 캔버스 shenanigans에 대한 단추 개체를 프로그래밍하려고합니다. 나는이 작업을 수행 할 때"for (element in window)"를 사용하여 변수를 javaScript로 변경하려고합니다 : 왜 undefined를 반환합니까?
but_endTurn = ui_button({
context: ctx,
hpos: 50,
vpos: 50,
width: 80,
height: 30,
radius: 5,
txt: "End Turn"
});
이, 함수가 동일하지 : 그런 다음
gameFont = "Calibri"; // Default button font
fontSize = 12; // Default button font size in px
fontColour = "white"; // Default button font colour
function ui_button(options) {
var that = {};
that.context = options.context;
that.hpos = options.hpos;
that.vpos = options.vpos;
that.width = options.width;
that.height = options.height;
that.radius = options.radius;
that.txt = options.txt;
that.fontColour = options.fontColour;
that.fontSize = options.fontSize;
that.font = options.font;
// Check if any of our keys weren't specified.
for (i=0;i<Object.keys(that).length;i++) {
// If the value is empty
if (!Object.values(that)[i]) {
// Then search the ENTIRE window for variables
for (element in window) {
// If the current element shares a name with the key we tested
if (element == Object.keys(that)[i]) {
// Replace this object's value with the global one
alert("Changing "+Object.keys(that)[i]+" with value of "+Object.values(that)[i]+" into "+eval(element));
alert(eval(element));
var ttt = eval(element)[0];
alert("ttt:"+ttt);
Object.values(that)[i] = ttt;
alert(Object.values(that)[i]);
alert("Internal var "+Object.keys(that)[i]+" now has value of "+Object.values(that)[i]+" from "+eval(element));
}
}
}
}
/* blahblah, more function stuff for the object */
return that
}
, 나는 다음과 같은 정의에 이러한 개체 중 하나를 생산 해요 : 저는 여기에 후 설명 할 것입니다 내 코드입니다 정의되지 않은 모든 변수에 대한 처리 : fontColour
을 예로 들어 봅시다.
fontColour
이 정의되지 않았 음을 알게되면, window의 요소를 찾아서 fontColour라는 변수를 찾습니다.
찾아냅니다.
alert(eval(element));
정확하게이 값은 "white"
입니다.
다음, 나는 그것의 변수를 만들 :
는var ttt = eval(element)[0];
alert("ttt:"+ttt);
이 또한 제대로 디버그 경고에 "white"
상태.
지금까지는 좋았습니다. 그럼 난 ttt
으로 변수를 정의 (내가 평가 (요소로 직선을 정의 할 때 같은 일이 발생) [0])
Object.values(that)[i] = ttt;
alert(Object.values(that)[i]);
alert("Internal var "+Object.keys(that)[i]+" now has value of "+Object.values(that)[i]+" from "+eval(element));
그러나 항상 경고 반환 Object.values(that)[i]
에 대한 "undefined"
! 두 번째 경고의 다른 변수는 항상 올바르게 표시됩니다.
아무도 내가 이것이 왜 그리고/또는 해결책을 제공하는지 파악할 수 있습니까?
감사합니다.
난 당신이 평가 제거하고 나는 그것을 동안 객체 내 글로벌 값을 저장, 제안 정확히 내 코드를 수정했습니다. 문제가 해결되었습니다. 당신의 도움을 주셔서 대단히 감사합니다. – Kalavinka