通过一段代码简单说js中的this的使用_基础知识

今天有朋友说遇到如下代码,让我帮解释原因

复制代码 代码如下:

var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};

alert(object.getNameFunc()());原因是js的this是动态决定的,和你调用方式有直接关系。

简单说如果你调用一个函数的时候使用“对象.函数名”的方式,那么this就是这个.(点)之前的对象,否则是window。
比如你在调用object.getNameFunc()的时候getNameFunc函数体中的this是刚声明的object。如果你写成

复制代码 代码如下:

var func = object.getNameFunc;
func();

这时候getNameFunc函数体中的this是window,虽然是同一函数调用方式的不同决定了this的不同。
同样的道理,object.getNameFunc()返回的是一个函数引用,加一个括号就是让函数执行。其实相当于如下代码

复制代码 代码如下:

var func = object.getNameFunc();
alert( func() );

函数前没有“对象.”这种形式,所以执行函数时候this是window,结果就很明显了。

以后我会写一篇关于js this的文章,欢迎大家关注我的CSDN博客tt361。

时间: 2024-11-10 05:21:12

通过一段代码简单说js中的this的使用_基础知识的相关文章

通过一段代码简单说js中的this的使用

本文通过一段代码与大家简单说说js中this的使用及相关问题,感兴趣的朋友可以参考下哈,希望对大家有所帮助   今天有朋友说遇到如下代码,让我帮解释原因 复制代码 代码如下: var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.get

关于JS中的闭包浅谈_基础知识

( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的我根本无法理解它想表达个什么意思!但是作为一只好奇的菜鸟又很想知道"闭包"到底是个什么东西!所以最终找到了传说中的"度娘"帮忙!还算有了一点小小的理解! 个人见解:在函数体内定义另外的方法函数,而这个方法函数被函数以外的变量引用,这时就形成了闭包! 可能这样的理解也太抽象了,并不是那么简单易懂!实例吧: 复制代码 代码如下: <script type="text/javascript"&g

实例讲解JS中数组Array的操作方法_基础知识

js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ 复制代码 代码如下: var arr = new Array();arr[0] = "aaa";arr[1] = "bbb";arr[2] = "ccc";//alert(arr.length);//3arr.pop();//alert(arr.length);//2//alert(arr[arr.length-1]);//bbbarr.pop();//

Js中sort()方法的用法_基础知识

返回一个元素已经进行了排序的 Array 对象. arrayobj.sort(sortfunction)  参数 arrayObj  必选项.任意 Array 对象.  sortFunction  可选项.是用来确定元素顺序的函数的名称.如果这个参数被省略, 那么元素将按照 ASCII 字符顺序进行升序排列.  说明 sort 方法将 Array 对象进行适当的排序: 在执行过程中并不会创建新的 Array 对象. 如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之

简单总结JavaScript中的String字符串类型_基础知识

String类型表示由0或多个16位Unicode字符组成的字符序列,即字符串.ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变.要改变某个变量保存的字符串,首先要销毁原来的字符串(此过程是在后台发生的),然后再用另一个包含新值的字符串填充该变量 字符字面量/转义序列: \n 换行 \t 制表 \r 回车 \b 空格 \f 换页符 \\ 斜杠 \' 单引号 \" 双引号 \xnn \unnn 字符串转换:两个方法 1.toString():只有null和un

JS中==与===操作符的比较_基础知识

===操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,并且两个值的String内容相同,返回true 要是两个值都是true或者都是false,返回true 要是两个值都是指向相同的Object,Arraya或者function,返回true 要是两个值都是null或者都是undefined,返回true ==操作符: 如果两个值具有相同类型,会进行===比较,返回===的比较值 如果两个值不具有相同类型,也有

js中parseInt函数浅谈_基础知识

从很热门的实例parseInt("09")==0说起.parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制.比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是2进制的结果:16. 下面我来说

浅谈JS闭包中的循环绑定处理程序_基础知识

前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件.就是这个问题让我整整调了一个下午.最后还是下班回家,上网查资料才知道怎么解决的. (PS:之前也在<jQuery基础教程>第四版中看过讲循环绑定处理程序的内容,当时估计也没怎么用心看,所以没记起来.) 大神要是知道这类情况,可以关掉窗口,写这些主要是给像我一样的小白看的.谢谢! 先贴上错误的例子让大家看看.(例子里面用到jQuery,请导入jQuery库) 复制代码 代码如下: <!DOCTYPE html PUBLIC &q

JavaScript编程中的Promise使用大全_基础知识

尽管Promise已经有自己的规范,但目前的各类Promise库,在Promise的实现细节上是有差异的,部分API甚至在意义上完全不同.但Promise的核心内容,是相通的,它就是then方法.在相关术语中,promise指的就是一个有then方法,且该方法能触发特定行为的对象或函数. Promise可以有不同的实现方式,因此Promise核心说明并不会讨论任何具体的实现代码. 先阅读Promise核心说明的意思是:看,这就是需要写出来的结果,请参照这个结果想一想怎么用代码写出来吧. 起步:用