首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript寄生继承中,"this“指的是什么?

在JavaScript寄生继承中,"this“指的是什么?
EN

Stack Overflow用户
提问于 2011-10-11 06:27:21
回答 2查看 155关注 0票数 7

在多年使用JavaScript中的原型继承创建应用程序之后,我开始探索使用寄生继承。尽管它的主要缺陷-至少对我来说-在创建对象层次结构时可能会在内存中创建多个方法副本,但我发现它确实与我产生了共鸣,因为它的简单性和"new“被呈现为不必要的事实。然而,我被“这个”卡住了。我在网上看到的大多数示例只涉及到皮毛,展示了如何实现寄生继承,如下所示:

代码语言:javascript
复制
   function foo() {
       return {
          method1 : function() {...}
       }
   }

   function bar() {
       var that = foo();
       that.method2 = function() {
           //is "this" pointing to bar()?
       }
       return that;
   }

正如我在bar()对象的注释中所问的," this“是指bar(),还是它的作用域被降级为method2?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-11 06:36:12

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

代码语言:javascript
复制
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"
票数 3
EN

Stack Overflow用户

发布于 2011-10-11 06:43:25

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

例如,从对象中调用一个函数作为属性(就像您在那里所做的那样)会将this variable设置为恰好是该对象。当您立即调用一个函数时,它的this被绑定到ES3中的global object和ES5中的null

还有其他方法和关键字可以更改this中的值。比如new.bind().call().apply()。但同样,在这里的特定代码片段中,this将绑定到存储在that中的对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7719387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档