admin管理员组文章数量:1414903
this is code from a react.js tutorial and the "this" keyword represents the App class. So my question is why can I not just write the class name instead?
import React, { Component } from 'react';
import './App.css';
import Person from './Person/Person';
class App extends Component {
state = {
persons: [
{ name: 'Max', age: 28 },
{ name: 'Manu', age: 29 },
{ name: 'Stephanie', age: 26 }
]
}
render() {
return (
<div className="App">
<h1>Hi, I'm a React App</h1>
<p>This is reallyyyyyyyy working!</p>
<button> switch name</button>
<Person name={App.state.persons[0].name} age={this.state.persons[0].age} />
<Person name={this.state.persons[1].name} age={this.state.persons[1].age}>My Hobbies: Racing</Person>
<Person name={this.state.persons[2].name} age={this.state.persons[2].age} />
</div>
);
// return React.createElement('div', {className: 'App'},
React.createElement('h1', null, 'Hi, I\'m a React App!!!'));
}
}
export default App;
this is code from a react.js tutorial and the "this" keyword represents the App class. So my question is why can I not just write the class name instead?
import React, { Component } from 'react';
import './App.css';
import Person from './Person/Person';
class App extends Component {
state = {
persons: [
{ name: 'Max', age: 28 },
{ name: 'Manu', age: 29 },
{ name: 'Stephanie', age: 26 }
]
}
render() {
return (
<div className="App">
<h1>Hi, I'm a React App</h1>
<p>This is reallyyyyyyyy working!</p>
<button> switch name</button>
<Person name={App.state.persons[0].name} age={this.state.persons[0].age} />
<Person name={this.state.persons[1].name} age={this.state.persons[1].age}>My Hobbies: Racing</Person>
<Person name={this.state.persons[2].name} age={this.state.persons[2].age} />
</div>
);
// return React.createElement('div', {className: 'App'},
React.createElement('h1', null, 'Hi, I\'m a React App!!!'));
}
}
export default App;
Share
Improve this question
asked May 28, 2018 at 3:00
Ryder ThackerRyder Thacker
1,4923 gold badges14 silver badges35 bronze badges
2
- Possible duplicate of How does the "this" keyword work? – ASDFGerte Commented May 28, 2018 at 3:12
-
You state "the
this
" keyword represents the App class". The answer to your question is right there in that misconception. Thethis
keyword does not represent the App class. As clearly explained in tens of thousands of tutorials and blog posts and answers right here on SO, it represents the current instance of the App class. – user9315861 Commented May 28, 2018 at 4:08
2 Answers
Reset to default 9Because in JavaScript, when you specify a class name (in particular, inside a class), you get a reference to the class, not to the current class instance. The instance properties and methods are not available through its class. Meanwhile this
represents the current instance.
class App {
test() {
console.log(App); // "class App ..."
console.log(this); // "[object Object]"
console.log(App.foo()); // "1"
console.log(this.foo()); // "2"
console.log(this.constructor.foo()); // "1"; this.constructor is a reference to the current object class
}
static foo() {
return 1;
}
foo() {
return 2;
}
}
Because
The this keyword refers to the current instance of the class. It can be used to access members from within constructors, instance methods, and instance accessors.
This rule is followed by any Object Oriented programming language. However, If you force your class to take instance with its name then it has to be static (Not the class itself but properties and methods).
For your purpose we can create App
class as module
class App {
hello() { return 'Hello World'; }
}
export let AppInstance = new App ();
Usage
import { AppInstance } from './App';
AppInstance.hello();
本文标签: javascriptWhy do you have to use keyword quotthisquot instead of class nameStack Overflow
版权声明:本文标题:javascript - Why do you have to use keyword "this" instead of class name? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745157790a2645280.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论