Добро пожаловать в мир JavaScript. Но, во-первых, было бы хорошо понять, что JavaScript не является языком на основе OO. На самом деле JavaScript - это прототип, основанный на языке, в котором вещи немного меняются в том, как это работает, поведение OO просто моделируется на этом языке. Здесь я нашел хороший вопрос об этом, и объяснения очень хороши и понятны о том, что такое «JavaScript». Link to the question. Существуют и другие языки, такие как LUA, или более новый IOLanguage, которые также являются языками на основе прототипов. Wikipedia have a good article about it with a list of prototype based languages.
Я думал, что было бы важно знать эти вещи, если вы действительно пытаетесь научиться JavaScript, это может прояснить некоторые вещи.
Теперь о вашем вопросе, не совсем ясно, стоит ли вопрос только о сериализации или о том, как работает JavaScript «OO». В любом случае кажется, что путаница в этой части кода примера, который вы опубликовали, и да, это может сбивать с толку, когда вы просто изучаете JS.
Часть кода с комментариями разъясняющие некоторые моменты:
//The function declaration that will become the constructor
//There is a reason for the "why" the function is used as the "base prototype"
//for other objects, but this would be a little out of context.
function MyChild() { this.init(); }
//Here you start declaring the prototype of instances from MyChild
//So everything that is in the prototype are like static (from C#) references
//in the objects, for properties, not for functions
MyChild.prototype = {
//Here is the problem of the code of the question that you posted
//The problem is that, when you create a instance from MyChild,
//"data" isn't a instance field, which means that if you change it,
//it will change in every object created from MyChild, this is because
//it is the same reference in all of them
data: {
id: 0,
fullName: "",
},
//Here we have the methods of the instance, when they are called, "this"
//is the object itself, so to access fields of the object you must use "this"
//in order to contextualize the operation, without "this" you are going to access
//the current function/global scope
init: function() {
//since the constructor call this method we can initialize things here
//these are the instance fields, you must set the property in the "this"
this.prop1 = 1;
this.prop2 = 2;
},
save: function (key) {
},
load: function (key) {
},
test: function() {
alert("Testing Child functions");
}
}
Somethings, что было бы хорошо, чтобы знать, чтобы полностью понять JavaScript легко: языки основанные
- Прототип парадигмы/Prototype, как в прототипные работы (подробнее о клонировании, чем создание экземпляров)
- Объявления с использованием «var» или нет
- Сфера действия в области JavaScript не зависит от функции «{...}»
- Контекст «это» доступен по всему коду JavaScript, но это означает разные вещи в разных местах. Также «это» можно «установить», вызвав некоторые специальные методы в JS.
Пожалуйста, разместите пример, который показывает проблему –
В приведенной ссылке есть пример. Я полагаю, что кто-то может получить два вопроса вместо одного, если они ответят на этот парень (или на девушку). – user609886
JavaScript * не является языком OO, поэтому справедливо сказать, что он не поддерживает его. – Stoive