js中的this

来源:互联网 发布:hermite矩阵的转置 编辑:程序博客网 时间:2024/06/08 04:20

function juggle(){  var result = 0;  for (var n = 0; n < arguments.length; n++){    result += arguments[n];  }  this.result = result;}var ninja1 = {};var ninja2 = {};juggle.apply(ninja1, [1, 2, 3, 4]);juggle.call(ninja2, 5, 6, 7, 8);assert(ninja1.result === 10, "juggled via apply");assert(ninja2.result === 26, "juggled via call");

this的不同调用方式

1.全局this以及一般函数中的this(指向全局对象)

console.log(this == window)//trueconsole.log(this.document === document);//truefunction f1(){return this;}var f2 = function(){return this;}console.log(f2() === window);//trueconsole.log(f1() === window);//true


2.作为对象方法里函数的this(指向对象本身)

var f2 = {o : 1,f1 : function(){return this;}}console.log(f2.o === 1);//trueconsole.log(f2.f1() === f2);//true


同样的道理:

var o = {o1 : 1,o2 : 2}var geto1 = function(){return this.o1;}o.geto1 = geto1;console.log(o.geto1() === o.o1);//true


3.原型链中的this(指向该对象本身而非原型链上的对象)

var o = {o1 : 1,o2 : 2,f : function(){return this;}}var obj = Object.create(o);alert(obj.o1);//1alert(obj.f() === obj);//truealert(obj.f() === o);//false


4.构造器中的this(指向新生成的对象)


5.apply/call中的this

function juggle(){  var result = 0;  for (var n = 0; n < arguments.length; n++){    result += arguments[n];  }  this.result = result;}var ninja1 = {};var ninja2 = {};juggle.apply(ninja1, [1, 2, 3, 4]);juggle.call(ninja2, 5, 6, 7, 8);assert(ninja1.result === 10, "juggled via apply");assert(ninja2.result === 26, "juggled via call");


总结:

1)最普通的函数调用模式:函数上下文是 window

2)方法调用模式:函数上下文是拥有这个方法的对象

3)构造器调用模式:函数上下文是新生成的对象

4)apply() or call():函数上下文可以是我们指定的任何对象 


0 0
原创粉丝点击