function makeNoSense(x) { this.x = x; } makeNoSense(5); console.log(x);// x 已经成为一个值为 5 的全局变量
function test(){ this.x = 1; alert(this.x); } test(); // 1
状况二:做为对象方法的调用java
函数还能够做为某个对象的方法调用,这时this指代对象内部属性被调用。编程
var myObject = { value :0, increment:function (inc){ this.value += typeof inc ==='number' ? inc:1; } }; myObject.increment(); console.log(myObject.value); //1 myObject.increment(2); console.log(myObject.value); //3
状况三 :做为构造函数调用数组
function Point(x, y){ this.x = x; this.y = y; } var p1 = new Point(3,2); console.log(p1.x+","+p1.y);//3,2
为了代表这时this不是全局对象,我对代码作一些改变:app
var x = 4; function Point(x, y){ this.x = x; this.y = y; } var p1 = new Point(3,2); console.log(p1.x+","+p1.y);//3,2
状况四: apply或call调用编程语言
function Point(x, y){ this.x = x; this.y = y; this.moveTo = function(x, y){ this.x = x; this.y = y; console.log(this.x+","+this.y); } } var p1 = new Point(0, 0); var p2 = {x: 0, y: 0}; p1.moveTo(1, 1); //1,1 p1.moveTo.apply(p2, [10, 10]);//10,10
在上面的例子中,咱们使用构造函数生成了一个对象 p1,该对象同时具备 moveTo 方法;使用对象字面量建立了另外一个对象 p2,咱们看到使用 apply 能够将 p1 的方法应用到 p2 上,这时候 this 也被绑定到对象 p2 上。另外一个方法 call 也具有一样功能,不一样的是最后的参数不是做为一个数组统一传入,而是分开传入的。本文经过对JavaScript中常常容易混淆的this在四中应用场景中的使用方法进行了讲解,但愿对您有所帮助,喜欢的话,请推荐一下哦。函数