如何使用'self = this'访问类属性?

时间:2016-02-27 09:55:29

标签: javascript oop typescript javascript-objects

我无法从方法中访问类属性。我的代码大致如下:

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,但此代码示例只是问题的简单演示。

4 个答案:

答案 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());