Последние учебники веб-разработки
×

JS Руководство

JS ГЛАВНАЯ JS Введение JS Куда JS Вывод JS Синтаксис JS Заявления JS Комментарии JS переменные JS операторы JS арифметика JS присваивание JS Типы данных JS функции JS Объекты JS Объем JS Мероприятия JS Строки JS Методы струнных JS чисел JS Методы Number JS математический JS Даты JS Форматы даты JS Методы Дата JS Массивы JS Методы массивов JS Booleans JS Сравнения JS условия JS переключатель JS петля For JS В то время как Loop JS Ломать JS Тип преобразования JS RegExp JS ошибки JS отладка JS Подъемно JS Строгий режим JS Гид по стилю JS Лучшие практики JS Ошибки JS Представление JS Зарезервированные слова JS JSON

JS формы

Формы проверки Формы API

JS объект

Определения объектов Свойства объекта Методы объекта Прототипы объектов

JS функции

Определения функций Функциональные параметры Функция Призвание Функция Затворы

JS HTML DOM

DOM вступление DOM методы DOM Документ DOM элементы DOM HTML DOM CSS DOM Анимации DOM Мероприятия DOM EventListener DOM навигация DOM Вершины DOM Nodelist

JS браузер BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Примеры

JS Примеры JS HTML DOM JS HTML вход JS HTML Объекты JS HTML Мероприятия JS браузер JS викторина JS Резюме

JS Рекомендации

JavaScript Объекты HTML DOM Объекты


 

JavaScript Функция Призвание


Функции JavaScript может быть вызван 4 различными способами.

Каждый способ отличается тем , как this инициализируется.


this ключевое слово

В JavaScript вещь называется this , является объектом , который "владеет" текущий код.

Значение в this , при использовании в функции, является объектом , который "владеет" функцию.

Обратите внимание , что this не является переменной. Это ключевое слово. Вы не можете изменить значение this .


Вызов функции JavaScript

Вы уже узнали, что код внутри функции JavaScript будет выполняться, когда "что-то" вызывает его.

Код в функции не выполняется , когда функция определена. Он выполняется , когда функция вызывается.

Некоторые люди используют термин "вызов функции" вместо "вызова функции".

Кроме того, довольно часто, чтобы сказать: "Призываем функции", "запустить функцию", или "выполнить функцию".

В этом уроке мы будем использовать вызов, потому что функция JavaScript может быть вызван без вызова.


Вызов функции как функции

пример

function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);           // myFunction(10, 2) will return 20
Попробуй сам "

Выше функция не принадлежит ни одному объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.

В HTML глобальный объект по умолчанию является HTML-страница сама, поэтому функция выше "принадлежит" к странице HTML.

В браузере объект страницы в окне браузера. Выше функция автоматически становится функцией окна.

myFunction() и window.myFunction() выполняет те же функции:

пример

function myFunction(a, b) {
    return a * b;
}
window.myFunction(10, 2);    // window.myFunction(10, 2) will also return 20
Попробуй сам "

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


Глобальный объект

Когда функция вызывается без объекта владельца, значение this становится глобальным объектом.

В веб-браузере глобальным объектом является окно браузера.

Этот пример возвращает объект окна в качестве значения , this :

пример

function myFunction() {
    return this;
}
myFunction();                // Will return the window object
Попробуй сам "

Вызов функции в качестве глобальной функции, вызывает значение this , чтобы быть глобальным объектом.
Использование объекта окна в качестве переменной может легко привести к сбою программы.


Вызов функции как метод

В JavaScript вы можете определить функцию в качестве методов объекта.

В следующем примере создается объект ( myObject ), с двумя свойствами ( firstName и lastName ) и способ ( fullName ):

пример

var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // Will return "John Doe"
Попробуй сам "

fullName метод является функцией. Функция принадлежит к объекту. myObject является владельцем функции.

Вещь называется this , является объектом , который "владеет" код JavaScript. В этом случае значение this является myObject .

Попробуй это! Изменение fullName метод возвращает значение this :

пример

var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this;
    }
}
myObject.fullName();          // Will return [object Object] (the owner object)
Попробуй сам "

Вызов функции в качестве метода объекта, вызывает значение this , чтобы быть сам объект.


Вызов функции с помощью функции конструктора

Если вызов функции предшествует с new ключевым словом, он является конструктором вызова.

Похоже, вы создаете новую функцию, но поскольку функции JavaScript являются объекты, которые вы на самом деле создать новый объект:

пример

// This is a function constructor:
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}

// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;                             // Will return "John"
Попробуй сам "

Конструктор вызов создает новый объект. Новый объект наследует свойства и методы от своего конструктора.

this ключевое слово в конструктор не имеет значения.
Значение this будет новый объект , созданный при вызове функции.


Вызов функции с методом функций

В JavaScript функции являются объектами. JavaScript функции имеют свойства и методы.

call() и apply() предопределенные методы функции JavaScript. Оба метода могут быть использованы для вызова функции, и оба метода должны иметь объект владельцем в качестве первого параметра.

пример

function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // Will return 20
Попробуй сам "

пример

function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // Will also return 20
Попробуй сам "

Оба метода принимают объект владельца в качестве первого аргумента. Единственное отличие состоит в том , что call() принимает аргументы функции по отдельности, и apply() принимает аргументы функции в массиве.

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

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

С помощью call() или apply() вы можете установить значение this , и вызывать функцию как новый метод существующего объекта.