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 25 Javascript
javascript Ext JS 状态默认存储时间
Feb 15 Javascript
学习ExtJS Panel常用方法
Oct 07 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
微信小程序之数据缓存的实例详解
Sep 29 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
微信小程序实现多选功能
Nov 04 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
微信小程序实用代码段(收藏版)
Dec 17 Javascript
JavaScript实现一键复制内容剪贴板
Jul 23 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 session的锁和并发
2016/01/22 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
jquery动态添加option示例
2013/12/30 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
即兴演讲稿
2014/01/04 职场文书
《影子》教学反思
2014/02/21 职场文书
服务员态度差检讨书
2014/10/28 职场文书
西安兵马俑导游词
2015/02/02 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js