我刚刚在JavaScript中遇到了一个有趣的情况.我有一个类,其方法使用object-literal表示法定义多个对象.在这些对象中,this正在使用指针.从程序的行为,我推断出this指针指的是调用方法的类,而不是文字创建的对象.  
这似乎是随意的,尽管这是我期望它工作的方式.这是定义的行为吗?跨浏览器安全吗?有没有任何理由可以解释为什么它超出"规范如此说明"的方式(例如,它是否是一些更广泛的设计决策/哲学的结果)?简化代码示例:
// inside class definition, itself an object literal, we have this function:
onRender: function() {
    this.menuItems = this.menuItems.concat([
        {
            text: 'Group by Module',
            rptletdiv: this
        },
        {
            text: 'Group by Status',
            rptletdiv: this
        }]);
    // etc
}
我从语言设计的角度来问这个问题.所以我试图找出答案
this什么?this是错误的,或者可以改进?为了澄清我为什么不安this,请考虑这个例子:
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
请注意遗留的对象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() !
this在完全不使用的情况下,无论方法在何处或如何使用,我们都能够建立和维护对象上下文.我不禁想到,凭借封闭所提供的力量,this变得多余,甚至可能有点危险......
我不是在反对某些仇杀this,或者想要开始争论; 我只是想更好地理解它.我确实理解"这个"可能很有用,但也认识到它也可能令人困惑 ......当然,对于初学者而言,也许对专家来说也会让人感到困惑. …
我不明白以下几点:
var x = function() {
    this.foo="foo";
    return function() {
        this.bar = "bar";
        return foo+bar;
    };
}(); // returns inner
alert(x()); // 'foobar', so both 'this' variables are set
alert(x.bar); // undefined - but wasn't it used correctly?
alert(new x().bar); // ok, works
我的假设是第一次生成并使用默认的'this'范围/变量映射,然后当调用'new'时,通过并返回带有新'this'的新对象(function?).或者,也许x不是一个合适的对象?但是,那么'这个'怎么会被设置并用来制作'foobar'?
了解这一点我需要知道什么?