0

正如我在这里读到的那样,Lua 有一个自我

Lua 中的对象是如何引用自己的?

但它真的是自我,无论上下文自我总是指对象本身。似乎是重言式,但不考虑 this 关键字,它不是 self 对象,而是执行代码的对象。

更新:我不是只指 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 中......并且在语义上不是 self。这应该是不变的,而“this”不是不变的:它可以在相同的执行流程中改变。

是的。这是一个事实,this将在不同的时间引用不同的对象,并且(例如)当您在某个其他对象上调用方法时this将引用该其他对象......同时执行该方法。

这是很好理解的,并且显然很有用......所以没有必要进一步深入。

那么,如果this在不同对象上调用方法时没有改变,这意味着什么?大概它会引用原始对象。

  • 但它指的是哪个原始对象?调用者中的值this?但那从哪里来的呢?
  • 这样的语义模型将this如何有用?我正在努力思考this无法使用static变量更好地实现的任何用例。

另一种可能性是您完全从 Javascript 的角度进行讨论,这this确实相当复杂......并假设this在典型的 OO 语言中同样复杂。那么this在 Java、C# 或 C++ 的上下文中并不复杂。

于 2011-04-10T14:06:03.467 回答