什么是Javascript的"这个"更好的名字?

Car*_*ter 10 javascript syntax this

我来自Java背景,基于类的继承模型,试图了解Javascript的基于原型的继承模型.,我认为是扔我送行的部分原因是我的"这个"扎实一点Java的意义 - 和Javascript的"本"是一个非常不同的野兽.我知道Javascript的"this"总是指函数的调用者,而不是函数定义的范围 - 我的意思是,我已经阅读并理解它的含义.但我想更深入地了解这一点,我认为有另一个名字会有所帮助.你怎么看待JS"这个"?每次碰到它都会做出心理替代吗?如果是这样 - 你使用什么词或短语?

Tri*_*ych 17

this可能会context在Javascript中合理地重命名为.

它实际上是指当前作用域的执行上下文,虽然该上下文可以是类的实例,但它当然不一定是 - 它可以是任何对象,并且可以在运行时修改它.

证明无法保证Javascript中的"方法"在定义它的"类"的实例上运行:

function Cat(){

     this.texture = 'fluffy';

     this.greet = function(){
         alert("Pet me, I'm " + this.texture);
     }
 }

 var cat = new Cat();

 // Default to using the cat instance as the this pointer
 cat.greet(); // Alerts "Pet me, I'm fluffy"

 // Manually set the value of the this pointer!
 cat.greet.call({texture: 'scaly'});  // Alerts "Pet me, I'm scaly"
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,对象的值this完全独立于包含函数的定义位置.


Bri*_*say 9

一个可能的替代名称是owner.这会引导您的思维方向,即所有者可以根据您执行的代码进行更改.

这个例子来自quirksmode:

在JavaScript中,this总是指我们正在执行的函数的"所有者",或者更确切地说,指向函数是其方法的对象.当我们在页面中定义忠实函数doSomething()时,它的所有者是页面,或者说是JavaScript的窗口对象(或全局对象).但是,onclick属性由它所属的HTML元素拥有.

在以下代码中,

function doSomething() {
   this.style.color = '#cc0000';
}
Run Code Online (Sandbox Code Playgroud)

element.onclick = doSomething;
Run Code Online (Sandbox Code Playgroud)

,owner指向执行时包含该方法的对象.

------------ window --------------------------------------
|                                          / \           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   | HTML element | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          --------------------                          |
|          | onclick property |                          |
|          --------------------                          |
|                                                        |
----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


And*_*are 5

我认为JavaScript 比你想象的this更接近Java this.在OOP上下文中,this表示"此实例".我认为JavaScript的this关键字可能令人困惑的是它可能具有不同的含义,具体取决于上下文.