mui.pushToRefresh组件下拉回调函数中this指向问题
先看一段代码
- (function($) {
- //阻尼系数
- var deceleration = mui.os.ios ? 0.003 : 0.0009;
- $('.mui-scroll-wrapper').scroll({
- bounce: false,
- indicators: true, //是否显示滚动条
- deceleration: deceleration
- });
- var up, down;
- $.ready(function() {
- //循环初始化所有下拉刷新,上拉加载。
- $.each(document.querySelectorAll('.mui-slider-group .mui-scroll'), function(index, pullRefreshEl) {
- $(pullRefreshEl).pullToRefresh({
- down: {
- callback: function() {
- var self = this;
- down = self;
- setTimeout(function() {
- var ul = self.element.querySelector('.mui-table-view');
- ul.insertBefore(createFragment(ul, index, 10, true), ul.firstChild);
- self.endPullDownToRefresh();
- }, 1000);
- }
- },
- up: {
- callback: function() {
- var self = this;
- up = self;
- console.log(up === down);
- setTimeout(function() {
- var ul = self.element.querySelector('.mui-table-view');
- ul.appendChild(createFragment(ul, index, 5));
- self.endPullUpToRefresh();
- }, 1000);
- }
- }
- });
- });
- var createFragment = function(ul, index, count, reverse) {
- var length = ul.querySelectorAll('li').length;
- var fragment = document.createDocumentFragment();
- var li;
- for (var i = 0; i < count; i++) {
- li = document.createElement('li');
- li.className = 'mui-table-view-cell';
- li.innerHTML = '第' + (index + 1) + '个选项卡子项-' + (length + (reverse ? (count - i) : (i + 1)));
- fragment.appendChild(li);
- }
- return fragment;
- };
- });
- })(mui);
上面代码30行我测试了一下down和up中的this是否引用了同一个对象,返回结果如下:
为了验证我的推断,写了如下测试代码:
- var o = Object.create({ id: 1, name: 'tom' });
- o.age = 19;
- console.log(o);
- o.print = function(obj) {
- Object.assign(obj, o);
- console.log(JSON.stringify(obj));
- obj.up.callbackup();
- obj.down.callbackdown();
- }
- o.print({
- up: {
- callbackup() {
- upCb(this);
- }
- },
- down: {
- callbackdown() {
- downCb(this);
- }
- }
- });

- pullDownLoading: function() {
- if (this.loading) {
- return;
- }
- if (!this.pullDownTips && this.options.down.pullDownTipStyle === 'pullDownTips') {
- this.initPullDownTips();
- this.dragEndAfterChangeOffset(true);
- return;
- } else {
- scroll.scrollTo(0, 40, 100);
- scroll.stopped = true;
- }
- this.loading = true;
- this.addMask();
- if (this.pullDownTips && this.options.down.pullDownTipStyle === 'pullDownTips') {
- this.pullDownTips.classList.add(CLASS_TRANSITIONING);
- this.pullDownTips.style.webkitTransform = 'translate3d(0,' + this.options.down.height + 'px,0)';
- } else {
- var topTipIcon = document.getElementById('topTipIcon');
- topTipIcon.className = 'mui-pull-loading mui-icon mui-spinner';
- topTipIcon.style.webkitAnimation = 'spinner-spin 1s step-end infinite';
- document.getElementById('topTipText').innerText = '正在刷新...';
- }
- this.options.down.callback.apply(this);
- }
第26行,尽管js中变量的作用域是定义时就确定了的,但是可以使用aplly, call等方法在运行时改变方法的上下文对象,从而可以解释本文开头的疑惑了。
mui.pushToRefresh组件下拉回调函数中this指向问题的更多相关文章
- 关于Vue中页面(父组件)下拉,页面中的子组件加载更多数据的实现方法
一个项目中存在很多这种情况:父组件(页面)中的子组件需要做下拉加载更多的需求,但是这个下拉到底部的动作只能通过监控页面(父组件)来完成 这就需要父子组件之间的通信,代码如下: 1. 建立一个用于父子组 ...
- JavaScript 回调函数中的 return false 问题
今天一个同事问了我一个问题,就是在 Ajax 方法中,请求成功后(success)的回调函数中根据响应的值来判断程序是否继续执行,他不解的是在回调函数中已经 return false 了,但是 Aja ...
- JS回调函数中的this指向(详细)
首先先说下正常的this指向问题 什么是this:自动引用正在调用当前方法的.前的对象. this指向的三种情况 1. obj.fun() fun中的this->obj,自动指向.前的对 ...
- Javascript回调函数中的this指向问题
使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题. 直接上例子: 1 var name = 'my name is window'; 2 var ob ...
- PHP.TP框架下商品项目的优化3-php封装下拉框函数
php封装下拉框函数 因为在项目中会经常使用到下拉框,所以根据一个表中的数据制作下拉框函数,以便调用 //使用一个表的数据做下拉框函数 function buildSelect($tableName, ...
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...
- 回调函数中使用MFC类的成员或对话框控件的简单方法
在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...
- 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...
- 使用匿名函数在回调函数中正确访问JS循环变量
有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...
随机推荐
- 【Linux】常用命令
一.文件结构 /: 根目录 /bin: 系统所需要的那些命令位于此目录. /boot: Linux的内核及引导系统程序所需要的文件目录,GRUB或LILO系统引导管理器也 ...
- 【面霸1】php知识点
PHP简介 Hypertext Preprocessor,超文本预处理器的缩写,主要是用于服务端的脚本程序 PHP 标记风格 1.xml风格 < ? php ? > 2.脚本风格 & ...
- PHP数据学习-二维数组【3】
<?php // $project = array( // array("bai",12,23.0), // array("zeng",34,12.0), ...
- python中去掉空行的问题
在python中处理空行时,经常会遇到一些问题.现总结经验如下: 1.遇到的空行如果只有换行符,直接使用=='\n'或者 len(line)==line.count('\n') 2.有多个空格+换行符 ...
- GPUImage 自定义滤镜
GPUImage 自定义滤镜 GPUImage 是一个基于 GPU 图像和视频处理的开源 iOS 框架.由于使用 GPU 来处理图像和视频,所以速度非常快,它的作者 BradLarson 称在 iPh ...
- 阿里云的esc
云服务器ecs作用如下:1.完全管理权限:对云服务器的操作系统有完全控制权,用户可以通过连接管理终端自助解决系统问题,进行各项操作:2.快照备份与恢复:对云服务器的磁盘数据生成快照,用户可使用快照回滚 ...
- oracle审计
Orcale审计机制研究 1. 设置审计 1.1. 查看审计状态 SQL>conn /as sysdba; 已连接 SQL>show parameters audit_trail; ...
- 【Linux】鸟哥的Linux私房菜基础学习篇整理(五)
1. type [-tpa] name:查看name命令是否为bash内置命令.参数:type:不加任何参数,type会显示出那么是外部命令还是bash的内置命令:-t:当加入-t参数时,type会通 ...
- C++中自己理解的一些细节哈
对于大牛来说,我写的可能很低级哈,留给自己看,以后遇到的都慢慢补充哈!^^ 1.每一个类定义结束后,不要忘了在类的结束符"}"后面加上一个";"哦! 2.构造函 ...
- BZOJ1611: [Usaco2008 Feb]Meteor Shower流星雨
1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 904 Solved: 393 ...