객체의 메소드를 다른 객체 문자의 속성으로 저장할 수없는 이유
-
08-07-2019 - |
문제
아래 코드는 특정 상황에서 실행하는 몇 가지 방법에 유의하여 더 간단한 구문을 사용하여 호출 할 수 있습니다.
var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};
그러나 코드는 빈 객체를 계속 반환합니다. Console.log에서 메소드가 정의되어 있는지 확인했습니다. 또한 이름을 변경하고 빈 객체를 호출 한 다음 콜백 (Alter)과 같은 속성을 추가하고 중요하지 않은 다른 변경 사항을 시도했습니다.
왜 이것이 효과가 없습니까?
오류는 puzzle.js의 238 행에 있습니다
해결책
정확히 문제는 무엇입니까? 속성이 될 것입니다 undefined
아니면 통화가 올바르게 작동하지 않습니까?
후자의 경우 문제는 메소드를 호출 할 때 this
더 이상 언급되지 않습니다 SPZ.sequenceEditor
, 그러나 당신의 callbacks
물체; 이 문제를 해결하려면 도우미 기능을 사용하십시오 bind()
(여러 프레임 워크에 의해 정의 된대로) 또는 전화를 직접 랩핑하십시오.
var callbacks = {
alter: function() {
return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
SPZ.sequenceEditor, arguments);
},
copy: function() {
return SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle.apply(
SPZ.sequenceEditor, arguments);
},
justSave: function() {
return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
SPZ.sequenceEditor, arguments);
}
};
그만큼 apply()
방법이 인수를받는 경우에만 필요합니다. 세부 사항을 참조하십시오 MDC.
제휴하지 않습니다 StackOverflow