通过一段代码简单说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。

(0)

相关推荐

  • js原生态函数中使用jQuery中的 $(this)无效的解决方法

    我今天的例子是这样的, 复制代码 代码如下: $("ul li").hover(function(){ setTimeout(function(){ $(this).addClass("test"); alert("延迟了0.3s 我出现了!") //测试 },300) }) 在运行时,这个黄色部分是不执行的 ,然后我弹出了一下$(this)原来是undefined (其实已经猜到了): 然后我就没想(习惯),直接到百度找了,然后没找到答案,然后

  • js中的this关键字详解

    this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, 复制代码 代码如下: function test(){ this.x = 1; } 随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面分四种情况,详细讨论this的用法. 情况一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global. 请看下面这段代码,它的运行结果是1.

  • js中this的用法实例分析

    本文实例分析了js中this的用法.分享给大家供大家参考.具体分析如下: 实例1:第一种调用this的方法--以函数形式调用.它代表全局对象window 复制代码 代码如下: <script type="text/javascript"> function t(){  alert(this);//这里this表示window对象. } t(); </script> 实例2:第二种调用this的方法--以对象属性的形式调用.它代表该对象.实例中onclick为p元

  • js this函数调用无需再次抓获id,name或标签名

    this就是你当前要执行的js所抓获的节点,这样在js里就可以不用document.getElement之类的写法来抓获id,name或标签名,省去一些麻烦.一般用obj来代替. 复制代码 代码如下: <input type="button" id="tianjia" value="保 存" class="btn1" onClick="nullCheck(this)"/> <script&

  • js对象内部访问this修饰的成员函数示例

    用wrapper封装这样在对象内外都可以访问 复制代码 代码如下: function MapPool(){ function createMarker(name, lat, lng, state){  var marker = new AMap.Marker({   position : new AMap.LngLat(lng, lat),        });  //the function mapMoveTo is not accessible here too        AMap.ev

  • JS函数this的用法实例分析

    本文实例讲述了JS函数this的用法.分享给大家供大家参考.具体如下: 在js中写函数时,很多用到this. this究竟是什么,this是个关键字,是个指针,指向执行环境作用域,也称之为上下文. 先说下函数吧,个人理解是函数是在语言中重复调用的代码块. 在JS里,把函数赋值给对象的属性时,称之为方法 如: var m={}; m.title='title'; m.show=function(){ alert(this.title) } m.show() 就是把函数作为对象m的方法来调用 这样的

  • js绑定事件this指向发生改变的问题解决方法

    可对函数进行如下扩展 复制代码 代码如下: Function.prototype.bind = function(obj) { var _this = this; return function() { _this.apply(obj,arguments); } } 用法如下 复制代码 代码如下: var a = function(){ alert(this.title) }.bind(document); a(); 常用在这儿 复制代码 代码如下: function myalert() { t

  • JS中的this变量的使用介绍

    JavaScript中this的使用 在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,充分了解this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余. 对于this变量最要的是能够理清this所引用的对象到底是哪一个,也许很多资料上都有自己的解释,但有些概念讲的偏繁杂.而我的理解是:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象. 示例一. 复制代码 代码如下: var obj = {};

  • 有关js的变量作用域和this指针的讨论

    一.变量作用域:[P71] 这一句话说的非常精辟:"在ECMAScript中,只有两种执行环境,全局环境和函数环境,每个函数都是一个执行环境,包括嵌套函数.换句话说,其他情况下即使变量声明在一对大括号中,在括号外部仍然可以访问这些变量".以下给出例子: 复制代码 代码如下: for(var i=0; i<5; i++) { var num = 20; // 在for语句中声明的变量 } alert(num); // 在for语句外部调用变量,仍然可以得到num的值 对异常语句也同

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

    今天有朋友说遇到如下代码,让我帮解释原因 复制代码 代码如下: var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()());原因是js的this是动态决定的,和你调用方式有直接关系. 简单说如果你调用一个函数

  • 简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = /white/g: ② 使用new关键字: var reg = new RegExp("表达式规则","表达式模式") eg: var reg = new RegExp("white","g"): 3.正则表达式的三种模式 ① g

  • 简单聊聊Js中的常见错误类型

    目录 前言 JavaScript中的错误类型 Error EvalError RangeError ReferenceError SyntaxError TypeError URIError 总结 前言 js在开发过程经常会遇到各种各样的报错,那么你了解这些错误产生的原因吗?下面跟我一起认识这几种常见的错误类型吧 JavaScript中的错误类型 Error EvalError RangeError ReferenceError SyntaxError TypeError URIError Er

  • 一段非常简单的js判断浏览器的内核

    大家应该还记得JavaScript行内样式怎么写吧?(看来我是废话了!) 在前端开发过程中,有时我们需要判断浏览器的内核前缀,对不同的浏览器做出不同的处理,因此我们可以这么做. alert(element.style.webkitTransition); 这个是获取以webkit为前缀的transition值.但如果不是webkit为前缀的浏览器,则会返回undefined.而我们可以将所有的内核前缀给枚举出来,然后获取其某个CSS的值,即可做出判断.代码如下: function getVend

  • 简单分析js中的this的原理

    很多人可能会有疑问,this到底是什么?为什么this的值变化多端? 首先我们来概括下this. this是一个对象,一般存在于函数中,表示当前函数的执行上下文; 值得一提的是,当函数在执行后,this才有绑定的对象,函数未执行时,this没有内容 接下来我们看看在不同场景下的this的指向 1.函数默认执行 :此时this指向Window function fn(){ console.log(this) //Window }; fn(); 在严格模式开启后,this的指向又有所不同 严格模式下

  • 在Node.js中使用HTTP上传文件的方法

    开发环境 我们将使用 Visual Studio Express 2013 for Web 作为开发环境, 不过它还不能被用来做 Node.js 开发.为此我们需要安装 Node.js Tools for Visual Studio.  装好后 Visual Studio Express 2013 for Web 就会转变成一个 Node.js IDE 环境,提供创建这个应用所需要的所有东西..而基于这里提供的指导,我们需要: 下载安装 Node.js  Windows 版,选择适用你系统平台的

  • 简单谈谈Java中String类型的参数传递问题

    提要:本文从实现原理的角度上阐述和剖析了:在Java语言中,以 String 作为类型的变量在作为方法参数时所表现出的"非对象"的特性. 一.最开始的示例 写代码最重要的就是实践,不经过反复试验而得出的说辞只能说是凭空遐想罢了.所以,在本文中首先以一个简单示例来抛出核心话题: public class StringAsParamOfMethodDemo { public static void main(String[] args) { StringAsParamOfMethodDem

  • js中let能否完全替代IIFE

    复制代码 代码如下: ^[\s\S   ]*\n ^[\s\S ]*\n [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 前言 最近,我写了一篇关于syntax of Java's IIFE pattern的文章,来解释为什么我们用现在的方式来写立即执行函数表达式.少数的读者批评文章过时了,都在争论在ECMA 2015中介绍的块级作用域变量使IIFE变得过时了. 恰恰相反,立即执行函数表达式一点也没有过时!因为这个理由,我决定写这篇后续文章来介绍一些立即执行函数表达式的常见用法.注意

  • js中this的指向问题归纳总结

    前言 js中this指向问题是个老生常谈的问题了,下面这篇文章再来给大家介绍下,大家可以看看,更深入的了解了解,下面话不多说了,来一起看看详细的介绍吧 this this:上下文,会根据执行环境变化而发生指向的改变. 1.单独的this,指向的是window这个对象 alert(this); // this -> window 2.全局函数中的this function demo() { alert(this); // this -> window } demo(); 在严格模式下,this是

  • JS中的reduce()方法使用小结

    目录 一.语法 二.实例 三.其他相关方法 过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce() 的用法. 一.语法 arr.reduce(function(prev,cur,index,arr){ ... }, init); 其中, arr 表示原数组: prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的

随机推荐