При необходимости в функции отказа Вы не можете использовать $ .get или $ .post функции; необходимо будет назвать $ .ajax функцией непосредственно. Вы передаете объект опций, который может иметь обратные вызовы "успеха" и "ошибки".
Вместо этого:
$.post("/post/url.php", parameters, successFunction);
Вы использовали бы это:
$.ajax({
url: "/post/url.php",
type: "POST",
data: parameters,
success: successFunction,
error: errorFunction
});
существует много других опций, доступных также. документация списки все доступные опции.
Фактически вы можете добавить еще один уровень привилегий, обернув все это в самоисполняющуюся функцию:
var MyObj = (function() { // scoping
var privateSharedVar = 'foo';
function privateSharedFunction() {
// has access to privateSharedVar
// may also access publicSharedVar via explicit MyObj.prototype
// can't be called via this
}
function MyObj() { // constructor
var privateInstanceVar = 'bar';
this.publicInstanceVar = 'baz';
function privateInstanceFunction() {
// has access to all vars
// can't be called via this
};
this.publicInstanceMethod = function() {
// has access to all vars
// also known as a privileged method
};
}
MyObj.prototype.publicSharedVar = 'quux';
MyObj.prototype.publicSharedMethod = function() {
// has access to shared and public vars
// canonical way for method creation:
// try to use this as much as possible
};
return MyObj;
})();
Только «общедоступные» свойства могут быть доступны извне через this
.
Для производительности причин, вам следует избегать того, что я назвал методами экземпляра: для каждого из них
Это верно?
Ошибка. Что ж, это зависит от того, что вы хотите делать. Не существует единой принятой канонической модели для реализации наследования стиля класса / экземпляра в JavaScript.
Но это:
if (propOne)
Вероятно, это ошибка, поскольку this.propOne
является свойством объекта-владельца, тогда как propOne
сам по себе является переменной, которая не была объявлена (по умолчанию это глобальная переменная, но обычно это ошибка).
В каких случаях следует помещать функции в прототип (например, protoFunc) по сравнению с конструктором (например, publicInstanceFunc)?
Функция, установленная в прототипе, такая же функция распределяется между всеми объектами. Единственный способ выяснить, к какому экземпляру он принадлежит, - это прочитать this при его вызове.
Функция, установленная на this в конструкторе, является новой функцией для каждого экземпляра MyObj
. Вы можете использовать это как альтернативный способ привязки к объекту-владельцу на основе замыканий вместо 'this', что может сэкономить написание материала привязки функций. Это'
1) Да, ваш код правильный.
2) Я использую функции, определенные в функции-конструкторе, когда я хочу получить доступ к другим членам, определенным конфиденциально внутри области самой функции-конструктора, например, когда вы хотите создать привилегированные методы .
Общедоступные функции, определенные в функции конструктора, требуют больших вычислительных ресурсов, чем добавление простой функции к прототипу объекта, но они также дают вам гораздо больше гибкости.
3) Да, если свойство является общедоступным, вы можете доступ к нему можно получить с помощью ключевого слова this
внутри расширенной функции прототипа, поскольку this
относится к экземпляру вашего объекта.
Что касается второго пункта, вы расширяете прототип так, чтобы все уже созданные объекты получили новый метод.
Кроме того, позволяет вам добавлять методы к встроенным объектам (например, добавление обрезать ()
до строка
).