我无法从方法中访问类属性。我的代码大致如下:
class MyClass {
self: MyClass = this;
someString: string = "Hello world!";
myMethod() {
return self.someString;
}
}
这给了我以下错误:Property 'someString' does not exist on type 'Window'.
我不明白self
类型Window
的含义。毕竟我明确地宣布它为MyClass
类型,这并没有给我任何错误。
我知道在这种情况下我可以使用return this.someString
,但此代码示例只是问题的简单演示。
答案 0 :(得分:3)
没有必要在类级别创建自我属性,因为您必须以php artisan cache:clear
访问它,并且它只是this.self.whatever
的别名。你的复杂事情,没有任何好处。
self只有在封闭内部保持对this.whatever
的引用才有意义,不在整个地方使用this
.call(this)
OT,只是为了完成:
class Foo {
data: any[]; //let's assume `data` is populated
bar(){
var self = this;
this.data.forEach(function(v, i){
//`this` points to the global namespace
//you have to reference it through `self`
console.log(i, v, self);
})
//or you use lambdas
this.data.forEach((v,i)=>{
//then TS takes care of `this`
//lamdas don't have an own `this`- or `arguments`-object
//ES6 treats them the same way.
console.log(v,i,this);
});
}
}
有第二个参数传递forEach()
- 对象,所以你可以实际写
this
但这不是这个问题的实际主题
答案 1 :(得分:2)
您的代码会被转换为以下内容(请参阅playground)。
var MyClass = (function () {
function MyClass() {
this.self = this;
this.someString = "Hello world!";
}
MyClass.prototype.myMethod = function () {
return self.someString;
};
return MyClass;
}());
您没有在对象的范围内创建self。您在self
中引用的myMethod
实际上是Window.self
。
要明确错误,请尝试将self
重命名为其他内容:
class MyClass {
moo: MyClass = this;
someString: string = "Hello world!";
myMethod() {
return moo.someString;
}
}
现在会产生正确的错误Cannot find name 'moo'. Did you mean the instance member 'this.moo'?
如果您想访问self
媒体资源,则必须使用this.self
。
答案 2 :(得分:1)
您不应在示例中使用self
class MyClass {
someString: string = "Hello world!";
myMethod() {
return this.someString;
}
}
使用this
访问内部字段
如果您想尝试使用self
进行访问,还应使用this
:
myMethod() {
return this.self.someString;
}
答案 3 :(得分:0)
我认为可以使用此代码: -
"use strict"
class myClass {
constructor(someString) {
this.someString = someString;
self = this;
}
myMethod() {
return this.someString;
}
}
var p1 = new myClass("Hello World");
console.log(p1.myMethod());