什么是;这";请参阅JavaScript寄生继承中的?

什么是;这";请参阅JavaScript寄生继承中的?,javascript,Javascript,在JavaScript中使用原型继承创建应用程序多年之后,我开始探索使用寄生继承。尽管在创建对象层次结构时可能会在内存中创建多个方法副本,这是一个主要的陷阱——至少对我来说是这样,但我发现它的简单性和“新”变得不必要的事实确实与我产生了共鸣。然而,我仍然停留在“this”的问题上。我在网上看到的大多数示例都只是简单介绍了如何实现寄生继承,如下所示: function foo() { return { method1 : function() {...}

在JavaScript中使用原型继承创建应用程序多年之后,我开始探索使用寄生继承。尽管在创建对象层次结构时可能会在内存中创建多个方法副本,这是一个主要的陷阱——至少对我来说是这样,但我发现它的简单性和“新”变得不必要的事实确实与我产生了共鸣。然而,我仍然停留在“this”的问题上。我在网上看到的大多数示例都只是简单介绍了如何实现寄生继承,如下所示:

   function foo() {
       return {
          method1 : function() {...}
       }
   }

   function bar() {
       var that = foo();
       that.method2 = function() {
           //is "this" pointing to bar()?
       }
       return that;
   }
正如我在bar()对象中的注释中所问的,“this”是指bar()还是将其范围降级为method2


谢谢

快速测试表明
正确引用了
条返回的对象

function foo() {
    return {
        method1 : function() { return "spam" }
    }
}

function bar() {
    var that = foo();
    that.method2 = function() {
        return this.method1();
    }
    return that;
}

var b = bar();
b.method2(); // "spam"

method2()
中的
this上下文变量
将绑定到从
foo()
伪构造函数返回的对象。每个函数(上下文)都有一个绑定
,这个
,上下文变量的值取决于方法本身的调用

例如,从对象调用函数作为属性(就像您在那里做的那样)将
此变量设置为该对象。当您立即调用一个函数时,它的
this
绑定到ES3中的
全局对象
,而它的
null
绑定到ES5中


还有其他方法和关键字可以更改
this
的值。像
new
绑定()
调用()
应用()
。但是,在这里的特定代码片段中,
this
将绑定到存储在
that
中的对象。谢谢现在我可以前进了。这是一个概念上的飞跃,做了这么长时间的原型继承。寄生遗传很常见,但在我感到有点不舒服的地方却有很大的不同——但这是一件好事!:)思想解释,但什么是ES3和ES5?