Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度2组件变量范围和参考_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角度2组件变量范围和参考

Javascript 角度2组件变量范围和参考,javascript,angular,typescript,Javascript,Angular,Typescript,有没有办法避免总是在引用私有组件变量或函数时附加“this” 例如,以下内容将导致“foo”上出现“找不到名称”错误 要修复此问题,我需要将“this”附加到foo变量,如中所示: console.log(this.foo); 我完全支持变量的强标识,但考虑到大多数角度组件的较小尺寸,这似乎过于严格。在JavaScript和TypeScript中,您需要使用this关键字引用该类中类的字段和函数 从 让我们看一个简单的基于类的示例: class Greeter { greeting:

有没有办法避免总是在引用私有组件变量或函数时附加“this”

例如,以下内容将导致“foo”上出现“找不到名称”错误

要修复此问题,我需要将“this”附加到foo变量,如中所示:

console.log(this.foo);

我完全支持变量的强标识,但考虑到大多数角度组件的较小尺寸,这似乎过于严格。

JavaScript
TypeScript
中,您需要使用
this
关键字引用该类中类的字段和函数

让我们看一个简单的基于类的示例:

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
如果您以前使用过C#或Java,那么语法应该很熟悉。我们宣布一个新的班级迎宾员。这个类有三个成员:一个名为greeting的属性、一个构造函数和一个greetit方法


您会注意到,在类中,当我们引用类中的一个成员时,我们预先准备了这个。。这表示它是一个成员访问。

构造函数不应该被视为类成员,不是吗?它是类成员,但不是字段。我讲的是字段,还有函数。构造函数也是一个
函数
,但是你不能在同一个类中调用它。我的问题是,我得到的代码看起来很可笑,看起来像这样。val=this.myMethod(this.variable1,this.variable2)。我想是个人喜好吧。谢谢你的澄清…@MikeM我和Suren在一起,这是不可能的。由于javascript中的作用域隔离问题,Typescript必须以这种方式实现类,如果不指定
this.greting
,可能会意外访问
窗口.greting
。coffeescript中有
@greting
前缀,意思是
这个。greting
也许typescript有一个等价的功能。@LenilsondeCastro,谢谢,这很有意义。如果TypeScript Transpile假设本地声明的变量和方法的作用域是
这个
,如果在类中内部引用,那么其他作用域(例如
窗口
)将需要显式声明,那就太好了。
class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");