0

ここで読んだように、Luaには自己があります

オブジェクトはLuaでどのように自分自身を参照しますか?

しかし、コンテキストが何であれ、自己は常にオブジェクト自体を参照するという意味で、それは本当に自己なのか. トートロジーのように見えますが、 this キーワードを考慮しないでください。それは自己オブジェクトではなく、コードが実行されているオブジェクトです。

更新:私はjavascriptだけを参照しているわけではなく、すべての言語を参照しています:これはjs、.net java ...に存在し、意味的に自己ではありません(したがって、これらの言語は候補ではありません)。 「this」は不変ではありません。同じ実行フロー中に変化する可能性があります。

私の質問は、INVARIANCE機能を備えた実際の「self」キーワードの正確なサポートです-閉鎖のような回避策に答えないでください:)。

「KNOW THUSELF」は、人だけでなくモノにも重要です。オブジェクトが自分自身を確実に自己参照できない場合、どのように完全なカプセル化を行うことができますか?

4

2 に答える 2

1

Javascript では、thisキーワードは関数が属するオブジェクトを参照します。ただし、問題は、関数の所有権が変わることです。たとえば、これがある場合:

function Foo(a) {
    this.bar = a;
    this.baz = function() {
        alert(this.bar)
    }
}

var foo = new Foo("foobar");
foo.baz();
// Alerts "foobar"

var baz = foo.baz;
// Copy the method into the window object, changing its ownership

baz();
// Alerts "undefined"

var fixedBaz = baz.bind(foo);
fixedBaz();
// Alerts "foobar"

メンバー関数は でその所有権を変更するvar baz = foo.baz;ため、キーワードは代わりにオブジェクトをthis指します。window

より良い質問は、「元のthisポインターを維持しながらオブジェクトのメンバー関数を参照するにはどうすればよいか」だと思います。

編集:

メソッドを使用して、ポインタを特定の値function.bindにロックできます。this

于 2011-04-10T13:21:52.450 に答える
0

私はあなたが何について話しているのか理解するのに苦労してきました...そしてそれはあなたの言っていることが無意味だからだと思い始めています.

これはjs、.net Java ...に存在し、意味的には自己ではありません。これはINVARIANTである必要がありますが、「this」は不変ではありません。同じ実行フロー中に変化する可能性があります。

はい。this異なる時点で異なるオブジェクトを参照することは事実であり、(たとえば) 他のオブジェクトでメソッドを呼び出すと、thisそのメソッドの実行中にその他のオブジェクトが参照されます。

これは十分に理解されており、明らかに便利です... したがって、これ以上詳しく説明する必要はありません。

thisでは、別のオブジェクトでメソッドを呼び出したときに変更されなかったとしたら、それはどういう意味でしょうか? おそらく、元のオブジェクトを参照します。

  • しかし、それはどの元のオブジェクトを参照するのでしょうか? this呼び出し元の値? しかし、それはどこから来たのですか?
  • そして、そのようなセマンティック モデルはどのようthisに役立つのでしょうか? 変数thisを使用してより適切に実装できなかったようなユースケースを考えるのに苦労しています。static

もう1つの可能性は、Javascriptの観点から完全に話しているということです。実際にはかなり複雑です...そして、典型的なオブジェクト指向言語でも同様に複雑でthisあると仮定しています。Java、C#、または C++ のコンテキストでは複雑ではありませんthisthis

于 2011-04-10T14:06:03.467 に答える