当前位置: 首页 > 知识库问答 >
问题:

TypeScript:静态方法无法访问构造函数中的私有属性

狄子真
2023-03-14

尝试创建静态函数可授予对属性 xdate 的访问权限,该属性已在构造函数中初始化(在 typescript 1.5.3 中)。

this.xdate可在所有其他实例方法中访问。它在静态方法中仍然不可访问。

在静态方法中,我是否可以让this.xdate访问?

以下是我的代码:-

class vehicle{
  constructor(private xdate = new Date()){}

  vroom(){    console.log(this.xdate);  }
  static staticvroom(){ console.log(this.xdate);} //Warning: Property 'xdate' does not exist on type 'typeof vehicle'.


}//vehicle ends

let v1 = new vehicle;
v1.vroom(); //works

vehicle.staticvroom(); //undefined

/* this is how i executed it:- 
D:\js\Ang2\proj2\myforms\tsc_cRAP>tsc 7_.ts
7_.ts(18,42): error TS2339: Property 'xdate' does not exist on type 'typeof vehicle'.

D:\js\Ang2\proj2\myforms\tsc_cRAP>node 7_.js
2017-06-23T09:17:41.365Z
undefined

*/

任何指点都会有很大的帮助。(如果这是一个重复的问题,请事先道歉)

/* UglyHack#1:由于静态方法甚至在对象实例之前就可用,所以我创建了一个tmp obj。在staticvroom(){}内,它工作了。

static staticvroom(){ 
  console.log((new vehicle).xdate); 
} 

不确定这方面的性能问题。

*/

共有1个答案

丁勇
2023-03-14

您需要将实例作为参数传递

class Vehicle {
  constructor(private xdate = new Date()) {}
  vroom(){
    console.log(this.xdate);
  }
  static staticVar: Date = new Date();
  static staticvroom(vehicle: Vehicle) {
    console.log(vehicle.xdate);
    console.log(this.staticVar); // You can even access static vars with this
  }


}// vehicle ends

let v1 = new Vehicle;
v1.vroom(); // works

Vehicle.staticvroom(v1);
 类似资料:
  • 我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode

  • 本文向大家介绍解析C#中的私有构造函数和静态构造函数,包括了解析C#中的私有构造函数和静态构造函数的使用技巧和注意事项,需要的朋友参考一下 私有构造函数 私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。例如: 声明空构造函数可阻止自动生成默认构造函数。注意,如果您不对构造函数使用访问

  • 为什么会这样?我的意思是,访问私有变量。

  • 问题内容: 什么时候应该使用构造函数,什么时候应该使用静态方法? 您能用小片段解释一下吗?我略读了一些线程,但是我仍然不清楚。 问题答案: 当您只想返回该类型的新对象并且希望简单时,请使用公共构造函数。 一个很好的例子是StringBuilder,因为它是可变的,您可能每次都想要一个新对象。 当您可能想重用对象(尤其是不可变的对象),返回子类或描述结构时,请使用静态因子方法。一个很好的例子是Enu

  • 问题内容: 我们有一个Hibernate / Spring应用程序,它具有以下Spring Bean: 将应用程序连接在一起时,在hibernate实体中使用私有构造函数时,会出现以下错误: 实体是典型的域对象,例如Employee等。 当将构造函数的可见性修改器更改为打包(或公共)时,应用程序运行良好,并且实体存储/加载到数据库中。我们/如何在Spring / Hibernate事务管理中使用私

  • 我是新爪哇,目前正在大学读一门课程。我们使用Java编程早期对象作为课程文献。我有一个关于新对象构造函数的问题。这本书非常明确地指出,“即使这样做是可能的,也不要从构造函数调用方法。” 这是所有的方法吗,句号?我理解从构造函数调用类自己的实例方法的问题。但是帮手方法等? 这可以接受吗?如果没有,我想你不能在构造函数中使用任何Java数学util函数或类似的东西?