在此,我假设您已经在运用Javascript中的类概念,假设您还了解OOP中的this.
还是习惯从实例来分析:
var someObject = {};
function someMethod(){
alert((this==window)+','+(this==someObject));
}
someObject.someMethod = someMethod;
someMethod();//true,false
someObject.someMethod();//false,true
上面的代码是定义了一个function和一个对象,并指定对象的某个属性为那个function;
在执行方法时我们知道,可以通过someObject.someMethod()这样调用,也可以通过someMethod()这样直接调用;
归根结底,这两种调用方式都能找到相应内存中的function-someMethod(有名方法),并执行。
但由于this在Javascript中的特殊性,这两种调用方式的输出却截然不同,前者返回false,true,而后者返回true,false,why?
网上有很多描述,我在此以我的理解作一个直白的描述,在需要JS处理机区分this时,方法由谁调用,则this表示谁。(之后会说明不需要JS处理机区分的情况)
someObject.someMethod()调用者为someObject,所以this==someObject返回true;
someMethod ()呢?对window有所理解的人应该知道,Javascript页面级的作用域为window,即缺省有名对象都相当于window的一个属性,如定义var a;相当于指定window.a属性,定义function b同样相当于指定window.b属性。所以someMethod()的调用相当于window.someMethod()调用,调用者为window,所以this==window返回true;
若是只有这样,可能大家还是比较容易理解,在Javascript中还存在两个特殊方法,Function.call和Function.apply。
这两个方法的调用者为someFunction,参数分别为:
call(oCaller,arg1,arg2,...)
apply(oCaller,[arg1,agr2,...])
这两个方法可以显式的告诉JS处理机,执行someFunction中的this对象为我的第一个参数oCaller,这也就是我之前提到的不需要JS处理机区分的情况;
有兴趣的同学可以试运行以下的实例:
var someObject = {};
var someObject2 = {};
function someMethod(){
alert((this==window)+','+(this==someObject)+','+(this==someObject2));
}
someObject.someMethod = someMethod;
someMethod();//true,false,false
someObject.someMethod();//false,true,false
someMethod.apply(someObject);//or call//false,true,false
someMethod.apply(someObject2);//false,false,true
还有一种特殊情况,new操作符处理函数,new操作符会创建一个新对象,将this指向这个新对象,然后进行操作,所以其中的this不表示任何已知句柄的对象,而是一个新的匿名对象,通过赋值语句可以指定给某个变量或者对象属性上,在此不再多作蛰述,试运行以下示例;
var someObject = {};
function ClassA(){
alert((this==window)+','+(this==someObject));
this.someAttr = 'someAttr';
}
someObject = new ClassA();//false,false
alert(someObject.someAttr);//someAttr
分享到:
相关推荐
JavaScript 中的 this 关键字是一个非常重要的概念,它经常会使开发者感到困 惑。通常来说,this 的值是在函数被调用时确定的,其值取决于函数被调用的方 式。本文将介绍 JavaScript 中 this 的用法,从而帮助开发者...
JavaScript中this的指向还没搞明白?来这看看 你就懂啦~
Javascript 中 this指向
JavaScript程序设计javascript中this的指向问题共6页.pdf.zip
NULL 博文链接:https://wv1124.iteye.com/blog/505231
JavaScript中this指向.pdf
JavaScript中this指向.docx
复习JavaScript中this指向及绑定
JavaScript中this的使用,简单理解,快速学会
深度理解js中this的指向问题
js中this相关的测试代码
探寻JavaScript中this指针指向_.docx
深度解析 和this
详解JavaScript中this关键字的用法_.docx
本文实例讲述了js中this用法。分享给大家供大家参考。具体如下: 1. 指向window 全局变量 alert(this) //返回 [object Window] 全局函数 function sayHello(){ alert(this); } sayHello(); 2. ...
深化理解Javascript中this的作用域_.docx
JS中this指向的更改 JavaScript 中 this 的指向问题 前面已经总结过,但在实际开中, 很多场景都需要改变 this 的指向。 现在我们讨论更改 this 指向的问题。 call更改this指向 call 的使用语法:func.call(thisArg,...
基于js中this和event 的区别(详解).docx
本文将给大家详细介绍关于Javascript中this关键字指向的相关内容,让我们先做一个小测试,如果全部答对了,恭喜你不用往下看了。 测试题目 第一题 [removed] var str = 'zhangsan'; function demo() { var str...
js中this的指向问题 常见的大概有以下几种情况: 全局作用域、普通函数以及定时器中的this指向全局对象window 方法中的this指向的是调用它的对象 构造函数中的this指向构造函数的实例 箭头函数中没有绑定this,this...