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 相关文章推荐
js 页面传参数时 参数值含特殊字符的问题
Dec 13 Javascript
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
jquery做的一个简单的屏幕锁定提示框
Mar 26 Javascript
js限制文本框只能输入数字方法小结
Jun 16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
手机端js和html5刮刮卡效果
Sep 29 Javascript
基于JavaScript实现带缩略图的轮播效果
Jan 12 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
前端开发基础javaScript的六大作用
Aug 06 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
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
Mootools 1.2教程 函数
2009/09/15 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python 登录网站详解及实例
2017/04/11 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
python 多进程队列数据处理详解
2019/12/23 Python
基于Python正确读取资源文件
2020/09/14 Python
python中xlrd模块的使用详解
2021/02/01 Python
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
教师党员思想汇报
2014/01/06 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
创业计划书如何编写
2014/02/06 职场文书
社会工作专业自荐信
2014/09/26 职场文书
个人创业事迹材料
2014/12/30 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
nginx配置指令之server_name的具体使用
2022/08/14 Servers