我还没有完全理解 javascript 中的对象定义和 this
作用域。我认为下面的 (c#ish) 伪代码很好地总结了它。
我如何定义一段 javascript 代码来创建一个具有以下所有属性的对象:
- 仅在对象的方法内部可见的私有(private)成员
- 在对象外也可见的公共(public)成员
- 一个(参数化的)构造函数,在实例化对象和初始化成员时执行
- 在指向对象自身方法的对象内部注册回调
- 当回调在方法 (
PrivateMethod
) 中执行时,可以访问对象实例的所有成员,最好使用this
指针
.
class MyObjectDefinition
{
public int publicField = 0;
private int privateField;
public MyObjectDefinition(int parameter)
{
this.privateField = parameter;
SomethingThatWantsA.CallBack(this.PrivateMethod);
}
public void PublicMethod()
{
this.privateField--;
this.publicField--;
}
private void PrivateMethod()
{
this.privateField++;
this.publicField++;
}
}
var instance = new MyObjectDefinition();
最佳答案
- public =>
this.
- private => 构造函数中的局部变量/函数
- 使用正确的
this
回调 - 使用 bind或将this
保存在局部变量中(me
或that
是传统名称)。
类似于以下内容:
function MyObjectDefinition()
{
this.publicField = 0;
var that = this;
var privateField;
this.MyObjectDefinition = function(parameter)
{
privateField = parameter;
SomethingThatWantsA.CallBack(PrivateMethod);
}
this.PublicMethod = function()
{
privateField--;
// or that.publicField--; if you are paranoid/like consistency
this.publicField--;
}
function PrivateMethod()
{
privateField++;
that.publicField++;
}
}
var instance = new MyObjectDefinition();
关于c# - javascript 对象中的成员可见性和 'this' 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614105/