Last active
June 26, 2017 20:00
-
-
Save OlehRovenskyi/d9352a89458eec288fd1a1a98e6f2ada to your computer and use it in GitHub Desktop.
keywoard this
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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