我正在学习React.不同网站的一些人告诉大家,使用refs是一种不好的做法(是的,完全使用它们).
什么是真正的处理?我将它附加到例如子组件(所以我可以访问内部的东西)是不是很糟糕?
谢谢!
我就是那种需要深入了解一切的人......所以,我一直在经历许多教学科目,并且我已经深入了解原型继承.
我清楚地了解它在ES5中是如何工作的(每个函数都有这个特殊的原型属性,它指向它所基于的对象.这个对象有.constructor属性,它指向函数等).
那么,现在让我们看一下ES5示例:
function Bunny(name) {
this.name = name
}
Bunny.prototype.sayName = function() {
console.log('Im',this.name)
}
Run Code Online (Sandbox Code Playgroud)
这个很清楚:函数Bunny得到的参数name将分配给一个新对象.
下一行将函数添加到函数的原型中,该函数将返回当前名称.
我们现在看看ES6课程:
class Fox{
constructor(name){
this.name = name;
}
sayName() {
console.log('Im', this.name)
}
}
Run Code Online (Sandbox Code Playgroud)
同样的东西:Constructor这就像我们的兔子功能.但sayName在狐狸和sayName兔子不一样.
让我们创建实例:
let bunny = new Bunny('Henry');
let fox = new Fox('Jerry');
Run Code Online (Sandbox Code Playgroud)
现在,检查他们的原型:
console.log(Object.getPrototypeOf(bunny))
console.log(Object.getPrototypeOf(fox))
Run Code Online (Sandbox Code Playgroud)
我们得到了什么?
//using repl.it - ES6
{ sayName: [Function] }
{}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我想这可能是因为我们sayName直接在Bunny的原型上设置了功能.所以我把它改成了这个:
function Bunny(name) {
this.name = name
//Warning - Bad practice ahead! …Run Code Online (Sandbox Code Playgroud) 当我static在班上有一个字段时:
public static int Counter = 0;
Run Code Online (Sandbox Code Playgroud)
使用static构造函数:
static Class() {
Counter++;
}
Run Code Online (Sandbox Code Playgroud)
当我创建这个类的对象并检查Class.Counter它显示我1是正确的.
但是当我创建同一个类的另一个对象时,Class.Counter仍然存在1.
这是为什么?