Javascript中这样的一些用法示例

  介绍

这篇文章主要介绍Javascript中这的一些用法示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强> 1.1.1摘要

相信有C/c++, c#或Java等编程经验的各位,对于 这关键字再熟悉不过了。由于Javascript是一种面向对象的编程语言,它和C/c++, c#或Java一样都包含 这关键字。
<强> 1.1.2   正文

由于许多面向对象的编程语言都包含 这关键字,我们会很自然地把这个和面向对象的编程方式联系在一起,这 通常指向利用构造器新创建出来的对象。而在ECMAScript中,这 不仅仅只用来表示创建出来的对象,也是执行上下文的一个属性:

activeExecutionContext =, {//Variable 对象。   签证官:,{…},   :thisValue   };

<>强全局代码中的

//,Global 范围//,,implicit  property  of //,,global 对象   时间=foo1 “abc";   警报(foo1);//, abc//,,explicit  property  of //,,global 对象   时间=this.foo2 “def";   警报(foo2);//, def//,,implicit  property  of //,,global 对象   var  foo3 =,“ijk";   警报(foo3);,//, ijk

前面我们通过显式和隐式定义了全局属性foo1, foo2和foo3,由于这 在全局上下文中,所以它的值是全局对象本身(在浏览器中是窗口   对象);接下来我们将介绍函数中的
<强>函数中的

当这 在函数代码中,情况就复杂多了,并且会引发很多的问题。
函数代码中这 值的第一个特性(同时也是最主要的特性)就是:<强>它并非静态的绑定在函数上
正如此前提到的,这 的值是在进入执行上下文(承办   上下文)的阶段确定的,并且在函数代码中的话,其值每次都不尽相同。
然而,一旦进入执行代码阶段,其值就不能改变了。如果要想给这 赋一个新的值是不可能的,因为在那时这 根本就不是变量了。
接下来,我们通过具体的例子说明函数中的
首先我们定义两个对象foo和人,foo包含一个属性的名字,而人包含属性名称和方法()说,具体的定义如下:

//,Defines  foo 对象。   var  foo =, {   名称:,“Foo"   };//,Defines  person 对象。   var  person =, {   名称:,“JK_Rush",   说:,()函数,{   警报(却;能够===,人);   alert (“My  name  is “, +, this.name);   }   };      person.say ();,//, My  name  is  JK_Rush//,foo 以及person  object  refer 过多;//,,same  function 说   时间=foo.say  person.say;      foo.say ();,//, My  name  is  Foo。

通过上面的代码,我们发现调用人的说()方法时,这 指向人对象,当通过赋值方式使得Foo的说()方法指向伤中的说()方法时。我们调用Foo()说的方法,发现 不这是指向人对象,而不是指向Foo对象,这究竟是什么原因呢?
首先,我们必须知道这 的值在函数中是非静态的,它的值确定在函数调用时,具体代码执行前,<强> 的值是由激活上下文代码的调用者决定的,比如说,调用函数的外层上下文,更重要的是,<强> <强>的值是由调用表达式的形式决定的强,所以说<强> <强>并非静态的绑定在函数上
由于这 并非静态地绑定在函数上,那么我们是否可以在函数中动态地修改这 的值呢?

//,Defines  foo 对象。   var  foo =, {   名称:,“Foo"   };//,Defines  person 对象。   var  person =, {   名称:,“JK_Rush",   说:,()函数,{   警报(却;能够===,人);   却,能够=,foo,,//ReferenceError   alert (“My  name  is “, +, this.name);   }   };      person.say ();,//, My  name  is  JK_Rush

现在我们在方法()中说,动态地修改这 的值,当我们重新执行以上代码,发现这 的值引用错误。这是由于一旦进入执行代码阶段(函数调用时,具体代码执行前),这 的值就确定了,所以不能改变了。
<强>引用类型

前面我们提到这 的值是由激活上下文代码的调用者决定的,更重要的是,这

Javascript中这样的一些用法示例