'this'关键字指的是另一个函数内的函数内的什么对象?

时间:2010-01-29 11:20:17

标签: javascript scope

基本上我试图理解并在JavaScript中学习'this'关键字的工作原理。

据我所知,'this'指的是当时内部的对象(函数)。

因此,相信这一点,我想测试下面简单代码的输出:

<body>

<input type="button" value="Add Age" onclick="Outer()" />

<script type="text/javascript">

function Outer(){

if(typeof this.Father == 'undefined')
    {
        this.Father = 0; 
    }

this.Father+=2;
alert(this.Father);

inner();

        function inner(){
            if(typeof this.Son== 'undefined')
            {
                this.Son = 0;
            };

            this.Son++;
            alert(this.Son);
            alert(this.Father);
        };
};
</script>
</body>

它的输出让我很困惑。因为在inner()函数中,this.Son输出Son的递增整数值。但我希望this.Father失败因为inner()没有.Feather属性。但是它没有抛出异常而是提醒它的价值。父亲 - 似乎

  • 'this'上方的一行是指inner()
  • 和以下行'this'指的是Outer()

此时我脑子里有两个问题:

  1. 'this'关键字是否始终指向 外部范围的内部甚至在内部功能内部?

  2. 没有任何实例声明'this'关键字引用方法中的内容? (我的意思是没有喜欢的东西var myFamily = new Outer()

  3. 谢谢,

    burak ozdogan

1 个答案:

答案 0 :(得分:5)

this由调用模式决定,即如何调用函数对象。

有4种不同的调用模式:

  1. 方法调用:函数被定义为某个对象的属性,并通过使用细化的对象调用,即.

    a.func(); // this指对象,即a

  2. 函数调用:普通函数调用。

    FUNC(); // this与全局对象绑定。

  3. constuctor调用:好吧,它有点复杂。由于构造函数被用作新函数对象的consturctor方法newthis指的是正在创建的新函数对象。

    var func = new Func(); // thisfunc构造函数中时引用Func

  4. 应用调用:

    func.apply(thisArg,argArray); // this与第一个参数

  5. 绑定

    换句话说,示例中的this都是指全局对象(您的onClick调用Other())。您应该尝试使用new Other()代替。