【问题标题】:The 'this' keyword in a function [duplicate]函数中的“this”关键字[重复]
【发布时间】:2013-12-17 04:04:23
【问题描述】:

我有一个 JavaScript 函数:

function main() {
   console.log(this);
}

这怎么会记录Document?当然它应该记录function main

如果不是,那么我如何在main 中声明一个变量,以供其余代码访问为main.varName

谢谢!

【问题讨论】:

  • 规范答案:this 取决于如何调用函数;它是动态的,猴子可修补的。
  • @RahulTripathi 哦,是的......对不起
  • "this" 指向全局窗口对象,如果调用 new main() 则指向新创建的对象; unschooled.org/2012/03/understanding-javascript-this

标签: javascript


【解决方案1】:

嘿,你可以这样做。

但是这看起来像一个类对象。

<script>

    function main() {
        this.testVar = "124";
    }

    var testMain = new main();

    alert(testMain.testVar);

</script>

另一种方法是您只需创建一个普通的全局变量。

我采用代码的方式是一种更类对象的方式。

希望我能帮上忙:)

【讨论】:

  • 不,我所做的并没有错。你的回答也没有道理。请填写更多的cmets,您现在的评论没有建设性。
【解决方案2】:

this 关键字引用函数的上下文,而不是函数本身。

当你将函数作为对象的方法调用时,那么this引用该对象,否则上下文就是全局上下文(文档)。

例子:

var o = {
  name: 'myObject',
  fn: function(){ alert(this.name); }
};

o.fn(); // alerts "myObject"

因为函数也是一个对象,你可以给它添加属性:

function main() {
}

main.varName = 42;

alert(main.varName); // shows "42"

但是,这不是函数和对象的常规使用。如果您想访问main.varName,通常main 将是一个普通对象而不是一个函数。

【讨论】:

    【解决方案3】:

    另外,请查看module pattern

    var person = function(){
       return module = {
          setName: function(name){
             module.name=name;
          }
       }
    };
    
    var bill = person();
    bill.setName('bill');
    console.log(bill.name);
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2019-11-18
      • 2012-04-15
      相关资源
      最近更新 更多