рдХреНрдпрд╛ рдХрд░реЗрдВ рдЬрдм "рдпрд╣" рд╕рдВрджрд░реНрдн рд▓рд┐рдВрдХ рдЦреЛ рджреЗрддрд╛ рд╣реИ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рдХреНрд░рд┐рд╕реНрдЯреА рд╕рд╛рд▓рд┐рд╕реНрдХреБ рджреНрд╡рд╛рд░рд╛ "рдпрд╣" рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИ "" рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ , рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ ред

рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдЦреЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдмреНрджрд┐рдХ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди, рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред рдЗрд╕ рдЫрджреНрдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЗрдП рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп


рдпрд╣ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИред

class Service { constructor(){ this.numbers = [1,2,3]; this.token = "token"; } doSomething(){ setTimeout(function doAnotherThing(){ this.numbers.forEach(function log(number){ //Cannot read property 'forEach' of undefined console.log(number); console.log(this.token); }); }, 100); } } let service = new Service(); service.doSomething(); 

DoSomething () рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп рд╣реИрдВ: doAnotherthing () рдФрд░ log () ред рдЬрдм service.doSomething () рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИред

рдмрд╛рдБрдз ()


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрд╛рдЗрдВрдб () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 doSomething(){ setTimeout(function doAnotherThing(){ this.numbers.forEach(function log(number){ console.log(number); console.log(this.token); }.bind(this)); }.bind(this), 100); } 

рдмрд╛рдЗрдВрдб () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрдм рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред

function doAnotherThing () {/*..*/ Ideal.bind(this) doAnotherThing () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ doSomething () рд╕реЗ рдЗрд╕рдХрд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред

рд╡рд╣ / рд╕реНрд╡


рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдирдП рдФрд░ рдЙрд╕ рд╕реНрд╡рдпрдВ рдЪрд░ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ doSomething () рд╡рд┐рдзрд┐ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред

 doSomething(){ let that = this; setTimeout(function doAnotherThing(){ that.numbers.forEach(function log(number){ console.log(number); console.log(that.token); }); }, 100); } 

рд╣рдореЗрдВ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ = рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдореЗрдВред

рддреАрд░ рдХрд╛рд░реНрдп


рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рджреЗрддрд╛ рд╣реИред

 doSomething(){ setTimeout(() => { this.numbers.forEach(number => { console.log(number); console.log(this.token); }); }, 100); } 

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЗрд╕ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрд╕ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдиреАрдЪреЗ рдПрдХ рдЪрд░ рдирд╛рдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХреЛрдб рд╣реИ:

 doSomething(){ let log = number => { console.log(number); console.log(this.token); } let doAnotherThing = () => { this.numbers.forEach(log); } setTimeout(doAnotherThing, 100); } 

рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐)


рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рдирд┐рдореНрди рд╡рд░реНрдЧ рдХреЛ рджреЗрдЦреЗрдВ:

 class Service { constructor(){ this.token = "token"; } doSomething(){ console.log(this.token);//undefined } } let service = new Service(); 

рдЖрдЗрдП рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рдирдореЗрдВ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ service.doSomething () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 //callback on DOM event $("#btn").click(service.doSomething); //callback for timer setTimeout(service.doSomething, 0); //callback for custom function run(service.doSomething); function run(fn){ fn(); } 

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдВрджрд░реНрдн рд▓рд┐рдВрдХ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рдмрд╛рдБрдз ()


рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдХреЛрдб рд╣реИ:

 //callback on DOM event $("#btn").click(service.doSomething.bind(service)); //callback for timer setTimeout(service.doSomething.bind(service), 0); //callback for custom function run(service.doSomething.bind(service)); 

рддреАрд░ рдХрд╛ рдХрд╛рд░реНрдп


рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЬреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ service.doSomething () ред

 //callback on DOM event $("#btn").click(() => service.doSomething()); //callback for timer setTimeout(() => service.doSomething(), 0); //callback for custom function run(() => service.doSomething()); 

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ


рдШрдЯрдХреЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИ рдЬрдм рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 class TodoAddForm extends React.Component { constructor(){ super(); this.todos = []; } componentWillMount() { this.setState({desc: ""}); } add(){ let todo = {desc: this.state.desc}; //Cannot read property 'state' of undefined this.todos.push(todo); } handleChange(event) { //Cannot read property 'setState' of undefined this.setState({desc: event.target.value}); } render() { return <form> <input onChange={this.handleChange} value={this.state.desc} type="text"/> <button onClick={this.add} type="button">Save</button> </form>; } } ReactDOM.render( <TodoAddForm />, document.getElementById('root')); 

рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирдП рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рдЗрдВрдб (рдЗрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 constructor(){ super(); this.todos = []; this.handleChange = this.handleChange.bind(this); this.add = this.add.bind(this); } 

"рдпрд╣" рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ


рдпрд╣ рдирд╣реАрдВ - рд╕рдВрджрд░реНрдн рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдлреИрдХреНрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 function Service() { let numbers = [1,2,3]; let token = "token"; function doSomething(){ setTimeout(function doAnotherThing(){ numbers.forEach(function log(number){ console.log(number); console.log(token); }); }, 100); } return Object.freeze({ doSomething }); } 

рдпрджрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрджрд░реНрдн рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред

 let service = Service(); service.doSomething(); //callback on DOM event $("#btn").click(service.doSomething); //callback for timer setTimeout(service.doSomething, 0); //callback for custom function run(service.doSomething); 

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрддрд╛ рд╣реИред
рдмрд╛рдЗрдВрдб () , рдХрд┐ / рд╕реЗрд▓реНрдл рд╡реЗрд░рд┐рдПрдмрд▓ рдФрд░ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд░реНрдн рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред

рдлреИрдХреНрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi421959/


All Articles