내 게임에서는 모든 개체를 JSON으로 변환 한 다음 파일에 저장하여 현재 상태를 저장합니다. 적과 같은 일부 객체는 함수가 있지만 JSON은 함수를 저장할 수 없습니다! 대안이나 해결책이 있습니까?어떻게 JSON이 객체의 기능을 저장할 수 없습니까?
5
A
답변
7
var Enemy = {
toJSON: function() {
// pack it up
},
fromJSON: function (json) {
// unpack it.
},
/* methods */
};
var e = Object.create(Enemy);
var json = JSON.stringify(e);
var same_e = Enemy.fromJSON(json);
.toJSON
방법은이 방법을보고 존재하는 경우,이 반환 된 객체를 캐릭터 라인 화됩니다 호출됩니다 JSON.stringify
의 표준 인터페이스입니다.
.fromJSON
메서드는 Enemy 개체의 명명 된 생성자에 불과합니다.
구체적인 예를JSfiddle
var Enemy = {
constructor: function(name, health) {
this.health = health || 100;
this.name = name;
},
shootThing: function (thing) { },
move: function (x,y) { },
hideBehindCover: function() {},
toJSON: function() {
return {
name: this.name,
health: this.health
};
},
fromJSON: function (json) {
var data = JSON.parse(json);
var e = Object.create(Enemy);
e.health = data.health;
e.name = data.name;
return e;
}
}
var e = Object.create(Enemy);
e.constructor("bob");
var json = JSON.stringify(e);
var e2 = Enemy.fromJSON(json);
console.log(e.name === e2.name);
메타 옵션 :
는 메타 옵션을 사용하면로드 할 때
Game.Enemy = {
...
class: "Enemy"
};
그런 다음 객체 클래스 이름을 작성하는 것 모든 json 데이터는 방금
var instance = Game[json.class].fromJSON(json);
1
난 당신이 기능은 시간을 구문 분석에 다시 추가 할 수 있도록 개체의 유형을 저장할 필요가 있다고 생각합니다. 예 : 적에 type
속성을 생성자에 넣습니다. 구문 분석시에는 먼저 JSON과 같은 문자열을 구문 분석 한 다음 결과 객체를 심도있게 탐색합니다. Enemy
과 같은 것을 발견하면 방법 등을 다시 첨부하십시오.
관련 문제
- 1. mysqli_result 객체의 내용을 어떻게 저장할 수 있습니까?
- 2. 데이터를 ArrayList에 저장할 수 없습니까?
- 3. 문자열을 SharedPreference에 저장할 수 없습니까?
- 4. arrayList에 데이터를 저장할 수 없습니까?
- 5. 사전을 객체의 속성으로 저장할 수 있습니까?
- 6. 내 기능을 찾을 수 없습니까?
- 7. 왜 장고에 개체를 저장할 수 없습니까?
- 8. 푸시 알림 메시지 데이터를 저장할 수 없습니까?
- 9. 웹 루트 위에 파일을 저장할 수 없습니까?
- 10. ActionDispatch 인스턴스를 클래스 변수에 저장할 수 없습니까?
- 11. 어떻게 장고의 잊어 버린 암호 기능을 구현할 수 없습니까?
- 12. 사용자 기능을 저장할 DB 설계
- 13. Datepicker 기능을 다시 납치 할 수 없습니까?
- 14. 백본 Javascript - 기능을 찾을 수 없습니까?
- 15. GSON을 사용하여 JSON이 포함 된 객체의 비 직렬화
- 16. nodejs가 객체의 기능을 인식하지 못합니다.
- 17. NodeJS에서 JSON이 비어 있는지 어떻게 확인할 수 있습니까?
- 18. 어떻게 "msmq를 삭제할 수 없습니까?"
- 19. Objective C에서 개체를 저장할 수 있지만 덮어 쓸 수는 없습니까?
- 20. 어떻게 sng에서 png 이미지를 저장할 수 있습니까?
- 21. django : 왜 twitter.Twitter 객체를 세션에 저장할 수 없습니까?
- 22. Date 객체의 model 속성에 Time 객체를 저장할 수 있습니까?
- 23. 이진 직렬화 (바이너리) 중에 객체의 해시 코드를 저장할 수 있습니까?
- 24. Python : scapy의 출력을 텍스트 파일에 저장할 수 없습니까?
- 25. 정기적 인 작업 영역 저장이 안전한 테이블을 저장할 수 없습니까?
- 26. 왜 tinyint는 MySQL에 255보다 많은 숫자를 저장할 수 없습니까?
- 27. float 값을 변수 (float) 속성에 저장할 수 없습니까?
- 28. 왜 C++의 STL 맵에 참조를 저장할 수 없습니까?
- 29. 왜 플로트 값을 저장할 수 없습니까? 항상 0입니다!
- 30. Word VBA를 사용하여 텍스트 색의 변경 내용을 저장할 수 없습니까?
json이 _data_를 비 직렬화하기 때문입니다. – Raynos
함수 인스턴스가 특정 또는 "클래스"에 특정한가요? – Thor84no
함수의 범위를 serialize하고 deserialize 할 때 어떤 일이 발생합니까? 함수는 문자열 표현의 코드 그 이상입니다. – pimvdb