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