【问题标题】:Closure for true private field in JavaScript using TypeScript使用 TypeScript 在 JavaScript 中关闭真正的私有字段
【发布时间】:2012-10-07 16:44:47
【问题描述】:

我正在尝试用 TypeScript 重写我的一个有用的 JavaScript 类。 在我的 JavaScript 类中,我使用闭包变量 self 来实现私有字段。 它在事件处理程序中很有用,例如onkeypress,了解事件的调用者和我的类的当前实例很重要。

var MyClass = function (valueHolder) {
            var self = this;
            this.valueHolder = valueHolder;

            MyClass.prototype.DoUsefullactions = function (value) {
                alert(value);
            }

            MyClass.prototype.onclickForHolder = function (e) {
                var value = $(this).val(); //value from attached input
                self.DoUsefullactions(value);
            }

            MyClass.prototype.GetSelf = function () {
                return self;
            }

            this.valueHolder.onclick = this.onclickForHolder;
        }

我找不到如何在没有this.self TypeScript 语法的情况下使类的所有方法都可以使用什么闭包变量,并以 JavaScript 方式创建真正的私有成员。

【问题讨论】:

  • 在构造函数中为原型分配属性并不好。它会在每个构造函数调用上分配这个。
  • 谢谢,仅供参考

标签: javascript closures typescript


【解决方案1】:

对此有另一种函数语法。只需使用:

MyClass.prototype.onclickForHolder = e => {
    var value = $(e.target).val(); //value from attached input
    this.DoUsefullactions(value);
}

this 将引用外部this,TypeScript 将在后台添加一个自类型变量。

【讨论】:

  • 谢谢,我知道这个版本可以解决问题,我假设 TypeScript 中这种情况存在抽象解决方案
【解决方案2】:

试试

 MyClass.prototype.onclickForHolder =(ev:Event) =>this.DoUsefullactions(this,ev);

【讨论】:

  • 如果您能解释一下他为什么要这样做,我们将不胜感激。
猜你喜欢
  • 2015-01-15
  • 2014-03-15
  • 2021-08-27
  • 2020-04-25
  • 2017-05-03
  • 2013-01-29
  • 2019-12-30
  • 2016-03-18
  • 2013-01-17
相关资源
最近更新 更多