参见js历史考:
https://cn.history.js.org/jd上有纸质书。特别好玩。
摘抄一段关于this的:
this 关键字§
每个函数都有一个隐式的 this 形参。将函数作为方法调用时,这个参数会被设置为用于访问该方法的对象。这和大多数面向对象语言中的 this(或 self)含义相同。但是 JavaScript 在「关联到对象的方法」与「独立函数」这两者之间,使用了单一的定义形式。这使 this 导致了许多程序员的困惑和 bug。
当直接调用函数而未为其限定(qualify)对象时,this 将被隐式设置为全局对象。而全局对象的属性包括了程序的所有全局变量。因此在直接调用函数时,this 所限定的属性引用,等价于对全局变量的引用。因为对 this 的处理取决于函数的调用方式,所以相同的 this 引用在不同的调用场景下,可能具有不同的含义。例如:
function setX(value) {
this.x = value;
}
var obj = new Object;
obj.setX = setX; // 将 setX 作为 obj 的方法
obj.setX(42); // 将 setX 作为方法调用
alert(obj.x); // 显示 42
setX(84); // 直接调用 setX
alert(x); // 获取全局变量 x,显示 84
alert(obj.x); // 显示 42
由于某些 HTML 会将 JavaScript 代码段隐式转换成作为方法调用的函数,因此 this 引起了进一步的混乱。例如:
<button name="B" onclick="alert(this.name + " clicked")>
Click me
</button>
当执行事件处理器时,它将触发按钮的 onclick 方法。这时 this 指向按钮对象,然后 this.name 会检索其 name 属性的值。
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: this算是js几大名坑之一了……
: 真好奇当年这个语言是怎么被攒出来的
--
修改:beep FROM 123.120.178.*
FROM 123.120.178.*