Экземпляр JavaScript функционирует по сравнению с опытными функциями [дубликат]

При необходимости в функции отказа Вы не можете использовать $ .get или $ .post функции; необходимо будет назвать $ .ajax функцией непосредственно. Вы передаете объект опций, который может иметь обратные вызовы "успеха" и "ошибки".

Вместо этого:

$.post("/post/url.php", parameters, successFunction);

Вы использовали бы это:

$.ajax({
    url: "/post/url.php",
    type: "POST",
    data: parameters,
    success: successFunction,
    error: errorFunction
});

существует много других опций, доступных также. документация списки все доступные опции.

29
задан Community 23 May 2017 в 12:08
поделиться

4 ответа

Фактически вы можете добавить еще один уровень привилегий, обернув все это в самоисполняющуюся функцию:

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 .

Для производительности причин, вам следует избегать того, что я назвал методами экземпляра: для каждого из них

51
ответ дан 28 November 2019 в 01:20
поделиться

Это верно?

Ошибка. Что ж, это зависит от того, что вы хотите делать. Не существует единой принятой канонической модели для реализации наследования стиля класса / экземпляра в JavaScript.

Но это:

  if (propOne)

Вероятно, это ошибка, поскольку this.propOne является свойством объекта-владельца, тогда как propOne сам по себе является переменной, которая не была объявлена ​​(по умолчанию это глобальная переменная, но обычно это ошибка).

В каких случаях следует помещать функции в прототип (например, protoFunc) по сравнению с конструктором (например, publicInstanceFunc)?

Функция, установленная в прототипе, такая же функция распределяется между всеми объектами. Единственный способ выяснить, к какому экземпляру он принадлежит, - это прочитать this при его вызове.

Функция, установленная на this в конструкторе, является новой функцией для каждого экземпляра MyObj . Вы можете использовать это как альтернативный способ привязки к объекту-владельцу на основе замыканий вместо 'this', что может сэкономить написание материала привязки функций. Это'

4
ответ дан 28 November 2019 в 01:20
поделиться

1) Да, ваш код правильный.

2) Я использую функции, определенные в функции-конструкторе, когда я хочу получить доступ к другим членам, определенным конфиденциально внутри области самой функции-конструктора, например, когда вы хотите создать привилегированные методы .

Общедоступные функции, определенные в функции конструктора, требуют больших вычислительных ресурсов, чем добавление простой функции к прототипу объекта, но они также дают вам гораздо больше гибкости.

3) Да, если свойство является общедоступным, вы можете доступ к нему можно получить с помощью ключевого слова this внутри расширенной функции прототипа, поскольку this относится к экземпляру вашего объекта.

3
ответ дан 28 November 2019 в 01:20
поделиться

Что касается второго пункта, вы расширяете прототип так, чтобы все уже созданные объекты получили новый метод.

Кроме того, позволяет вам добавлять методы к встроенным объектам (например, добавление обрезать () до строка ).

3
ответ дан 28 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: