相关疑难解决方法(0)

JavaScript中'this'关键字行为的基本原理是什么?

我从语言设计的角度来问这个问题.所以我试图找出答案

  1. 这种行为的理由是this什么?
  2. 这种行为在何种程度上this是错误的,或者可以改进?

为了澄清我为什么不安this,请考虑这个例子:

var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
Run Code Online (Sandbox Code Playgroud)

请注意遗留的对象f()是多么容易丢失:与之分离a,this成为全局对象(window对于浏览器).

现在考虑:

var newA = function(){
    var self = {};
    self.f = function(){ return self; }
    return self;
}

var a = newA();
var f = a.f;
// f() == a.f() !
Run Code Online (Sandbox Code Playgroud)

this在完全不使用的情况下,无论方法在何处或如何使用,我们都能够建立和维护对象上下文.我不禁想到,凭借封闭所提供的力量,this变得多余,甚至可能有点危险......

我不是在反对某些仇杀this,或者想要开始争论; 我只是想更好地理解它.我确实理解"这个"可能很有用,但也认识到它也可能令人困惑 ......当然,对于初学者而言,也许对专家来说也会让人感到困惑. …

javascript language-design

8
推荐指数
2
解决办法
1645
查看次数

使用对象方法作为事件监听器

我是一个刚刚学习 JavaScript 的 C++ 人员,因此“this”绑定到调用对象的事实仍然令人惊讶。我想使用对象方法作为事件侦听器,并希望确保我以 JavaScript 专业人士的所有风格来执行此操作。

因此,为了让该方法拥有其对象“this”,以便我可以在适当的上下文中访问其属性,我编写了以下内容:

var user =
{
    status: 1,      // login status: 0:invalid password, 1:logged out, 2:logged in
loginName: "",

// Method called whenever the user submits a username/password via html form:
onLoginSubmit: function (event)
{
        if (this != user)   // called from 'form submit' callback, so call ourselves:
    {
        user.onLoginSubmit(event);
        return;
    }
}
};
Run Code Online (Sandbox Code Playgroud)

我在这里找到了以前的答案:Accessing an object's property from an event Listener call in Javascript,但建议的解决方案基本上是创建一个全局的。有没有比以前的解决方案或我的递归解决方案更酷、更专业的方法来获得“这个”?

javascript events addeventlistener

5
推荐指数
1
解决办法
4800
查看次数