Skip to content

Instantly share code, notes, and snippets.

@OlehRovenskyi
Last active June 26, 2017 20:00
Show Gist options
  • Save OlehRovenskyi/d9352a89458eec288fd1a1a98e6f2ada to your computer and use it in GitHub Desktop.
Save OlehRovenskyi/d9352a89458eec288fd1a1a98e6f2ada to your computer and use it in GitHub Desktop.
keywoard this
// this
var a = {
name: 'Вася',
getName: function () {
return this.name;
},
getContext: function() {
return this;
}
}
a.name; // ???
a.getName(); // ???
a.getContext(); // ???
// или можем через a.name, но это опасно
var a = {
name: 'Вася',
getName: function () {
return a.name;
},
getContext: function() {
return this;
}
};
var admin = a;
a = null;
admin.sayHi(); // error
// Использование this гарантирует, что функция работает именно с тем объектом, в контексте которого вызвана.
// ---------------------------------------
// this examples
// ---------------------------------------
// 1. Простой вызов function
function f() {
console.log(this === window); // true
}
f();
// 2. Constructor
function f() {
this.x = 5;
console.log(this === window); // false
}
var o = new f();
console.log(o.x === 5); // true
// 3. Метод obj
var o = {
f: function() {
return this;
}
}
console.log(o.f() === o); // true
// 4. Методы apply, call
function f() {
console.log(this.toString()); // 123
}
f.call(123); // this внутри функции f будет ссылаться на объект Number со значением 123
// 5. bind
function f() {
console.log(this.x);
}
var bound = f.bind({x: 3}); // bound - новая функция - "обертка", у которой this ссылается на объект {x:3}
bound();// Выведет 3
// ---------------------------------------
// Tasks
// ---------------------------------------
// 1
var f = function() {
this.x = 5;
(function() {
this.x = 3;
})();
console.log(this.x); //
};
new f();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment