我正在努力学习var AccountMainMenu = React.createClass({
getInitialState: function() {
return { focused: 0 };
},
clicked: function(index) {
this.setState({ focused: index });
},
render: function() {
var self = this;
var accountMenuData = [
{
name: "My Account",
icon: "icon-account"
},
{
name: "Messages",
icon: "icon-message"
},
{
name: "Settings",
icon: "icon-settings"
}
/*{
name:"Help & Support <span class='font-awesome icon-support'></span>(888) 664.6261",
listClass:"no-mobile last help-support last"
}*/
];
return (
<div className="acc-header-wrapper clearfix">
<ul className="acc-btns-container">
{accountMenuData.map(function(data, index) {
var activeClass = "";
if (self.state.focused == index) {
activeClass = "active";
}
return (
<li
key={index}
className={activeClass}
onClick={self.clicked.bind(self, index)}
>
<a href="#" className={data.icon}>
{data.name}
</a>
</li>
);
})}
</ul>
</div>
);
}
});
ReactDOM.render(<AccountMainMenu />, document.getElementById("app-container"));
的概念。有人可以告诉我super
中的i
是指什么?
它是super(i)
类中的私有int
变量i
吗?它是NaturalNumber
中的参数吗?它是指其他东西吗?我对语法很困惑。
NaturalNumber?
答案 0 :(得分:3)
在您的示例中,它是EvenNumber的构造函数参数。调用super(i)
将构造函数参数传递给超类构造函数(按值,因为它是一个原语)。然后,超类构造函数将该值存储在私有字段中。
答案 1 :(得分:2)
super(arguemnts)
调用您传递给arguments
的超类构造函数
在class EvenNumber extends NaturalNumber
的情况下,它是确保您的类的NaturalNumber ness 的机制。
在这种情况下,您要通过super
传递给EvenNumber
类构造函数传递给public EvenNumber(int i)
类的相同值。因此,它会初始化private int i
字段(由于它是私有的,您无法直接访问EvenNumber
。)
如果我们稍微重命名变量,也许你会更好地看到它:
class NaturalNumber {
private int value;
public NaturalNumber(int naturalValue) {
this.value = naturalValue;
}
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int oddValue) {
super(oddValue);
}
// ...
}
因此,当您通过EvenNumber
创建new EvenNumber(2)
的实例时,EvenNumber(int oddValue)
构造函数中发生的第一件事就是super(2)
,它将调用NaturalNumber(int naturalValue)
构造函数并传递{{ 1}}到它,最后将2
设置为int value
。
答案 2 :(得分:1)
当你调用super(i)
时,它会调用超类的构造函数。
super
关键字指的是超类(父类)。在这种情况下,EvenNumber的超类是NaturalNumber,因为偶数扩展 NaturalNumber。所以基本上,通过super(i)
说NaturalNumber(i)
。
答案 3 :(得分:1)
class NaturalNumber {
private int i;
public NaturalNumber(int x) { this.i = x; }
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int y) { super(y); }
// ...
}
考虑上面的代码。此代码与您的代码完全相同。我更改了变量名称以使其清楚。所以,当你调用super(y)时,它所做的是调用它的父类的构造函数,即NaturalNumber(i),y的值传递给这个构造函数,并且在这个构造函数中你设置变量i的值等于传递给构造函数的值。
因此,当我们调用super(int)时,它所做的是将一个整数值传递给父类的构造函数。
另外,要设置父类的某个变量,我们可以super.i=10
将父类中的变量“i”设置为10.
答案 4 :(得分:1)
i
表达式中的super
将完全引用到i
类内的局部变量NaturalNumber
。除此之外,不扩展其范围。
答案 5 :(得分:-1)
super()
应该使用与超类的构造函数相同的参数进行调用,因为它完全相同。例如:
class Person {
private name;
public Person(String name) {
this.name = name;
}
public Person() { /* Empty constructors initialize with default values,
i.e in this case name is initialized with null*/
}
}
class Employee extends Person {
private double salary;
public Employee(double salary) {
super("Michael");
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is "Michael"*/
}
public Employee(double salary) {
super();
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is null as the empty constructor initialized it*/
}
}
希望这会有所帮助。