Разница между функцией, методом и вызовом конструктора объектов.
Функция - обычный вызов независимой функции.
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 - этот объект.
Единственная задача функций конструкторов объектов - это создавать объекты, а не выполнять какие-либо действия!!!
Комментариев нет:
Отправить комментарий