gpt4 book ai didi

c# - javascript 对象中的成员可见性和 'this' 范围

转载 作者:行者123 更新时间:2023-11-30 18:02:27 26 4
gpt4 key购买 nike

我还没有完全理解 javascript 中的对象定义和 this 作用域。我认为下面的 (c#ish) 伪代码很好地总结了它。

我如何定义一段 javascript 代码来创建一个具有以下所有属性的对象:

  1. 仅在对象的方法内部可见的私有(private)成员
  2. 在对象外也可见的公共(public)成员
  3. 一个(参数化的)构造函数,在实例化对象和初始化成员时执行
  4. 在指向对象自身方法的对象内部注册回调
  5. 当回调在方法 (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 保存在局部变量中(methat 是传统名称)。

类似于以下内容:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com