LINUX.ORG.RU

JSON.stringify + File = облом. Что делать?

 , ,


0

1

Пару месяцев назад точно работало, а теперь вот так:

var f = new File([], null);
console.log(f.lastModified);
console.log(JSON.stringify(f));
console.log(Object.keys(f));

> 1434885067856
> "{}"
> []

Оставлю в стороне вопросы как и нахрзачем они это сделали. Мне то теперь что, руками свойства перебирать?

PS. Если кто знает как сделать такие же свойства - буду признателен.

★★★★★

Ответ на: комментарий от Deleted

При чём тут файл, контент из файла иначе вытягивается, а мне только проперти нужны.

ya-betmen ★★★★★
() автор топика
let f = new File([], null);

Используй console.dir(f):

FilelastModified: 1434888052784
lastModifiedDate: Sun Jun 21 2015 15:00:52 GMT+0300 (MSK)
name: "null"
size: 0
type: ""
webkitRelativePath: ""
__proto__: File
  constructor: File() { [native code] }
  lastModified: (...)
  get lastModified: () { [native code] }
  lastModifiedDate: (...)
  get lastModifiedDate: () { [native code] }
  name: (...)
  get name: () { [native code] }
  size: (...)
  type: (...)
  webkitRelativePath: (...)
  get webkitRelativePath: () { [native code] }
  __proto__: Blob

Как видишь, lastModified это (не перечисляемый) геттер на File.prototype, поэтому ты его и не видишь.

> Object.getOwnPropertyNames(Object.getPrototypeOf(f))
< ["name", "lastModifiedDate", "lastModified", "webkitRelativePath", "constructor"]
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(f)))
< ["size", "type", "slice", "constructor"]

Делать сам можешь через Object.defineProperty().

loyd
()

Мне то теперь что, руками свойства перебирать?

Ну разумеется руками. А завтра они ещё 100500 свойств туда добавят, тебе они нужны?

< let f = new File([], null);
< JSON.stringify(['size', 'lastModified'].reduce((r, p) => { r[p] = f[p]; return r }, {}));
> "{"size":0,"lastModified":1434888612806}"
loyd
()
Ответ на: комментарий от ritsufag

До того, как веб-программерам под веществами в HTTP показали CONNECT и они додумались до веб-сокетов, веб-программеры хреначили бинарный контент в XML и называли это SOAP.
Никогда не понимал, зачем им нужно было BASE64 заворачивать в XML.

Shadow ★★★★★
()
Ответ на: комментарий от loyd

Object.getOwnPropertyNames(Object.getPrototypeOf(f))

Во! Спасибо.

То что это геттер через прототип я утром сам догнал. Редко с такими извращениями дело имею.

ya-betmen ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.