пятница, 21 июня 2013 г.

Разница между функцией, методом и вызовом конструктора объектов.

Разница между функцией, методом и вызовом конструктора объектов.

Функция - обычный вызов независимой функции.

function hello(username) {
    return "hello, " + username;
}
hello("Boris"); // "hello, Boris"

Функция может обращаться к глобальному объекту.

var username = 'Boris';

function hello() {
    return "hello, " + this.username;
}

hello(); // "hello, Boris"

Однако в строгом режиме ES5 this = undefined!!!

function hello() {
    "use strict";
    return "hello, " + this.username;
}
hello(); // error: cannot read property "username" of undefined

Метод - функция привязанная к объекту.

var obj = {
    hello: function() {
        return "hello, " + this.username;
    },
    username: "Boris"
};
obj.hello(); // "hello, Boris"

Метод одного объекта можно привязать к другому объекту.

var obj2 = {
    hello: obj.hello, // метод из первого объекта
    username: "Boo"
};
obj2.hello(); // "hello, Boo"

Также методом объекта может быть обычная функция, поскольку this всегда будет являться этот объект или window.

function hello() {
    return "hello, " + this.username;
}

var obj1 = {
    hello: hello,
    username: "Gordon Gekko"
};
obj1.hello(); // "hello, Gordon Gekko"

var obj2 = {
    hello: hello,
    username: "Biff Tannen"
};
obj2.hello(); // "hello, Biff Tannen"

Функция конструктор объектов всегда вызывается с оператором new и всегда создает объект {}!

function User(name, passwordHash) {
    this.name = name;
    this.passwordHash = passwordHash;
}

var obj = new User("sfalken", "0ef33ae791068ec64b502d6cb0191387");

obj.name; // "sfalken"

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

Комментариев нет:

Отправить комментарий