JS函数this的用法实例分析


Posted in Javascript onFebruary 05, 2015

本文实例讲述了JS函数this的用法。分享给大家供大家参考。具体如下:

在js中写函数时,很多用到this. this究竟是什么,this是个关键字,是个指针,指向执行环境作用域,也称之为上下文。
先说下函数吧,个人理解是函数是在语言中重复调用的代码块.
在JS里,把函数赋值给对象的属性时,称之为方法
如:

var m={};
m.title='title';
m.show=function(){
alert(this.title)
}
m.show()

就是把函数作为对象m的方法来调用
这样的话,this指向的就是m这个对象.

直接调函数名的叫函数:

var a=1212;
function show(){
alert(a)//1212
}
show()// 1212

在全局环境里,可以把全局变量理解为window的属性,全局函数为window的方法
看下面的例子:

var m ={};
m.id='mmm';
m.show=function(){
  alert(this.id);
}
var a={};
a.id='aaa';
a.show=m.show;
a.show(); //aaa

a.show=m.show;  先理解这句话,因为函数是个对象,
m.show=function(){
  alert(this.id)
}

这表达式相当于a.show 与m.show同时引用指向

function(){
  alert(this.id)
}

其实相当于

a.show=function(){
  alert(this.id)
}

所以调用a.show()时,this指向的是a对象,
再看以下一个栗子

var m ={};
m.id='mmm'
m.show=function(){
  alert(this.id)
}
var a={}
a.id='aaa'
a.show=function(){
  m.show()
};
a.show(); //mmm

所以调用a.show()时,相当于调用了m.show()的方法,所以this.指向的是m对象。

再看以下一个例子,一开始还是不很懂

var color='red';
var app = {};
app.color="green";
app.paint=function(node){
node.style.color=this.color;
  alert(this.color);
}
function findNode(callback){
  var btn =document.querySelector('.btn');
  callback(btn);//传进来,
}
findNode(app.paint);
alert(this.color); //red 而不是green

函数传参时,是按值传参的,而不是引用

所以findNode(app.paint);传进来时,其实是

function(node){
  node.style.color=this.color;
  alert(this.color);
}

的引用,又因为findNode是全局定义的,所以this指向WINDOW OR UNDEFINED;

关于传参,按值传递过去的

function show(a){
  alert(a)
}

参数为基本数据类型时好理解

var b=10;
show(b)//alert(10);

至于对象

var c ={};
c.prop=true;
var showProp=function(obj){
obj.prop=false
}
showProp(c); //c.prop = false

有些人觉得是上面例子是按引用传参
其实上面还是按值传参,showProp(c)把c传进函数里时,c其实相当于一个引用, 函数里对obj.prop=false,相当于对引用的对象 改成{prop:false}

再看下面一例子

var c ={};
c.prop=true;
var showProp=function(obj){
  obj = new Object();
  obj.prop=false
  return obj;
}
showProp(c);
alert(c.prop); //true

这里明明把传入obj修改了,如果按照函数按引用传参,函数里面的修改肯定会反映到外部

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
JS刷新框架外页面七种实现代码
Feb 18 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
基于打包工具Webpack进行项目开发实例
May 29 Javascript
详解angular应用容器化部署
Aug 14 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
Feb 05 #Javascript
js关于命名空间的函数实例
Feb 05 #Javascript
js实现数字每三位加逗号的方法
Feb 05 #Javascript
javascript实现字符串反转的方法
Feb 05 #Javascript
Javascript中拼接大量字符串的方法
Feb 05 #Javascript
jquery操作select方法汇总
Feb 05 #Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 #Javascript
You might like
PHP与SQL注入攻击[二]
2007/04/17 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
js加解密 脚本解密
2008/02/22 Javascript
javascript window对象属性整理
2009/10/24 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
物流管理专业大学生自荐信
2013/10/04 职场文书
单位门卫岗位职责
2013/12/20 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
大学校园活动策划书
2014/02/04 职场文书
家长会主持词
2014/03/26 职场文书
2015年客服工作总结范文
2015/04/02 职场文书