Я пытаюсь получить действительно прочное понимание JavaScript, и я спотыкаюсь о большой проблеме для меня. Я привык работать на языках C, и один из барьеров, которые я нахожу, касается функциональности прототипа JavaScript и когда функции объявлены, поскольку это касается порядка выполнения.Использование прототипа и выполнение порядка выполнения
Например, возьмем следующий код:
var construct = new Constructor(); //I can do this even if its above the declaration of the object.
construct.MyPrivilagedFunction(); //Can do this here too, even though it's above the function declaration.
construct.MyPublicFunction(); //Can't do this because it is above the function declaration.
function Constructor() {
//Private member
var m_Ding = "Ding!";
//Accessible publicly and has access to private member.
this.MyPrivilagedFunction = function() {
console.log(m_Ding);
}
}
Constuctor.prototype.MyPublicFunction = function() {
//Doesn't have access to private members. This doesn't work.
console.log(m_Ding);
}
Я понимаю, что прототипирования обеспечивает более высокую производительность, потому что тогда копия функции не хранится на каждом экземпляре вашего объекта и вместо того, чтобы каждый экземпляр имеет в виду (и, я думаю, каждый новый экземпляр можно считать целым новым типом объекта?). Однако прототипирование не позволяет мне использовать функцию до ее определения. Кроме того, прототипированная функция не имеет доступа к частному члену объекта.
Это действительно проблема, потому что я работаю над проектом, где два объекта должны будут использовать функции друг друга. Если я поместил один объект ранее в код, у него не будет доступа ко второму объекту, потому что прототипированные функции будут соответствовать порядку выполнения (сверху вниз).
Боковое примечание: Я также знаю, что мой объект должен быть объектным литералом (например, object = {property: value}), но я все еще пытаюсь получить четкое представление о сфере видимости и прототипировании, чтобы попытаться с этим на данный момент.
что у меня вопрос непонятно. – 2013-03-03 10:04:00