当前位置: 首页 > 编程日记 > 正文

微信小程序之apply和call ( 附示例代码和注释讲解) apply call  bind

微信小程序开发交流qq群   173683895

相同点:作用是一样的,它们能劫持另外一个对象的方法,继承另外一个对象的属性;

js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改变函数运行时上下文,最终的返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。

具体情况下如何选用bind()、call()、apply()  呢?

(1)如果不需要关心具体有多少参数被传入函数,选用apply();

(2)如果确定函数可接收多少个参数,并且想一目了然表达形参和实参的对应关系,用call();

(3)如果我们想要将来再调用方法,不需立即得到函数返回结果,则使用bind();

call()、apply() 、bind() 的区别:

(1)call()、apply()和bind()都是用来改变函数执行时的上下文,可借助它们实现继承;

(2)call()和apply()唯一区别是参数不一样,call()接收的是参数列表,而apply()则接收参数数组

(3)bind()是返回一个新函数,供以后调用,而apply()和call()是立即调用。

主要区别是call()和apply()在调用函数之后会立即执行,

而bind()方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。

使用示例场景: apply和call在小程序中可以实现在公共方法js里面修改当前js的AppData的数据;

代码示例:

示例一: call使用

const app = getApp()
var group = require('../group-template/group-template.js');
Page({onLoad: function (options) {var countDown_time = '00:21:03'group.Init.call(this, countDown_time); //登录}
})

注释:使用call把onLoad的this(当前对象)和 countDown_time 变量传给了 group-template.js 文件的Init函数里面。

//group-template.js

function Init(countDown_time) {var that = this;// 倒计时var time = countDown_time.split(':')var hhh = parseInt(time[0])var mmm = parseInt(time[1])var sss = parseInt(time[2])var Interval = setInterval(function () {if (sss > 0) {sss--} else {console.log('时间到')clearInterval(Interval)}if (sss == 0) {if (mmm > 0) {mmm--sss = 59;}if (mmm == 0 && hhh > 0) {hhh--sss = 59;mmm = 59;}}that.setData({sss: (sss < 10) ? '0' + sss : sss,mmm: (mmm < 10) ? '0' + mmm : mmm,hhh: (hhh < 10) ? '0' + hhh : hhh})}, 1000)
}
module.exports = {Init: Init
}

实现功能:通过setInterval和call实现了一个倒计时功能

示例一: apply使用

const app = getApp()
var group = require('../group-template/group-template.js');
Page({data: {countDown_time: '00:21:03'},onLoad: function (options) {group.Init.apply(this, []); //登录}
})

//group-template.js

function Init() {var that = this;// 倒计时var time = that.data.countDown_time.split(':')var hhh = parseInt(time[0])var mmm = parseInt(time[1])var sss = parseInt(time[2])var Interval = setInterval(function () {if (sss > 0) {sss--} else {console.log('时间到')clearInterval(Interval)}if (sss == 0) {if (mmm > 0) {mmm--sss = 59;}if (mmm == 0 && hhh > 0) {hhh--sss = 59;mmm = 59;}}that.setData({sss: (sss < 10) ? '0' + sss : sss,mmm: (mmm < 10) ? '0' + mmm : mmm,hhh: (hhh < 10) ? '0' + hhh : hhh})}, 1000)
}
module.exports = {Init: Init
}

相关文章:

(转)@ContextConfiguration注解说明

场景&#xff1a;学习spring实战中相关的单元测试 1 正常使用 ContextConfiguration Spring整合JUnit4测试时&#xff0c;使用注解引入多个配置文件 1.1 单个文件 ContextConfiguration(locations"../applicationContext.xml") ContextConfiguration(classes Simple…

ios pusher使用_如何使用JavaScript和Pusher构建实时评论功能

ios pusher使用by Rahat Khanna通过拉哈特汉娜 如何使用JavaScript和Pusher构建实时评论功能 (How to build a Live Comment feature using JavaScript and Pusher) These days “Social” has become the buzzword and we all want our apps to be the center of these amazi…

OpenDigg前端开源项目月报201704

由OpenDigg 出品的前端开源项目月报第一期来啦。我们的前端开源月报集合了OpenDigg一个月来新收录的优质前端开源项目&#xff0c;方便前端开发人员便捷的找到自己需要的项目工具。 reactide React web应用开发的第一个专用IDE redux-offline 持久性Redux存储 react-loadable 用…

ubuntu 14.04 使用apt-get出现如下问题解决办法

Some packages could not be installed. This may mean that you haverequested an impossible situation or if you are using the unstabledistribution that some required packages have not yet been createdor been moved out of Incoming. 使用aptitude这个代替apt-get …

java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器

java通用象棋游戏The Universal Chess Interface (UCI) has been around a long time and used by many chess engines. What does GraphQL bring to the mix?通用国际象棋界面(UCI)已经存在了很长时间&#xff0c;并且被许多国际象棋引擎使用。 GraphQL带来了什么&#xff1f…

表单高级应用和语义化

type"hidde" 隐藏域 disable 禁用 什么是表单语义化 符合W3C规范 语义化的标签 结构合理、代码简洁 分组<fieldset><legend>标题</legend> </fieldsrt> 关联<lable for"id"></lable>转载于:https://www.cnblogs.com/G…

modelsim中一个神奇又容易忽视的问题

最近在用modelsim对设计进行仿真的过程中发现了一个非常有趣的问题。接下来&#xff0c;让我们跟随着一个设计的仿真来发现问题的原因所在。首先&#xff0c;以调用基于IP核的加法器为例。加法器IP核的参数设置如下&#xff1a; 设计代码如下&#xff1a; /*******************…

html页面引入另一个html页面

微信小程序开发交流qq群 173683895 正文&#xff1a; 上源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><script src"js/jquery.js" type"text/javascript" charset"utf-8">…

javascript晚绑定_JavaScript的应用,调用和绑定通过托管野餐来解释

javascript晚绑定by Kevin Kononenko凯文科诺年科(Kevin Kononenko) JavaScript的应用&#xff0c;调用和绑定通过托管野餐来解释 (JavaScript’s apply, call, and bind explained by hosting a cookout) If you have ever been in charge of operating the grill at a famil…

13.angular时间

<!DOCTYPE html><html ng-app"myApp" ng-controller"myCtrl"><head lang"en"> <meta charset"UTF-8"> <title>T38-angular时间</title> <script src"js/angular.js" type&…

【SICP练习】110 练习3.23

练习3-23 原文 Exercise 3.23. A deque (“double-ended queue”) is a sequence in which items can be inserted and deleted at either the front or the rear. Operations on deques are the constructor make-deque, the predicate empty-deque?, selectors front-deque …

js页面跳转或重定向

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 页面重定向推荐的4种方式&#xff1a; <!DOCTYPE html> <html><head><script type"text/javascript">window.location.href"https://blog.c…

javascript组件_是的,JavaScript运行Swift。 无论如何都要构建您的组件库。

javascript组件Here’s a question I’ve heard a few times recently:这是我最近几次听到的一个问题&#xff1a; “What if we create a component library in React/Vue/Angular/whatever and a new component technology replaces it?”“如果我们在React / Vue / Angula…

结对开发--求二维数组的最大子数组

小组成员&#xff1a;信1201-1班 黄亚萍 信1201-1班 袁亚姣 一、题目要求 程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是: 数组的行数, 数组的列数, 每一行的元素, (用逗号分开) 每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数。 二、设计思路 在…

实验二 164 张增进

一、实验目的 掌握基于覆盖理论与基本路径的基本白盒测试方法和实践 二、实验要求 运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例&#xff0c;并运行测试用例检查程序的正确与否&#xff0c;给出程序缺陷小结。 三、实验内容 根据各位同学自己的被测程序&#xff0c;分别作…

微信小程序之录音与播放功能(完整示例demo)

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 源码简介&#xff1a; 点击按钮实现相应效果 ↓↓↓↓↓↓↓↓ //test.wxml <button bindtapstart>开始录音</button> <button bindtapplay>播放录音</butt…

为什么您不需要精通数学就可以学习编程

by Pau Pavn通过保罗帕文(PauPavn) 为什么您不需要精通数学就可以学习编程 (Why you don’t need to excel at math to learn how to program) This is probably one of the greatest misconceptions I’ve ever heard.这可能是我听过的最大的误解之一。 If you want to prog…

Android动态加载jar/dex

http://www.cnblogs.com/over140/archive/2011/11/23/2259367.html 加载jar boolean bool new File("/sdcard/test.jar").exists();DexClassLoader cl new DexClassLoader("/sdcard/test.jar", this.getCacheDir().getAbsolutePath(), null, this.getCla…

使用μJava进行变异体测试

一、环境配置mujava运行的是Java程序&#xff0c;Java的环境配置见EclipseJDK配置那点事。 将下载的mujava相关文件放到一个文件夹&#xff0c;文件夹放到C:\muJava 添加mujava环境变量CLASSPATH&#xff1a; C:\mujava\mujava.jar;C:\mujava\openjava.jar;C:\mujava\junit.jar…

【微信小程序之画布】一:canvas组件

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 此文章主要是对canvas组件的介绍与基本的使用。在组件中绘画了一条固定的直线。 我们先了解一下canvas组件&#xff1a; wxml: <canvas classmyCanvas canvas-id"myCanvas…

JavaScript的“ this”通过成立一个高中乐队来解释

by Kevin Kononenko凯文科诺年科(Kevin Kononenko) JavaScript的“ this”通过成立一个高中乐队来解释 (JavaScript’s “this” Explained By Starting A High School Band) If you have ever been in a band, had a friend that started a band, or seen a corny 80s movie …

Ubuntu 16.04 安装Django

> pip install django1.10.3......或者:> pip3 install django1.10.3&#xff08;我采用&#xff09;......或者:>python3 -m pip install django1.10.3......或者:pip install -i https://pypi.douban.com/simple/ django1.10.3......如果你只安装一个版本的 Python,…

【微信小程序之画布】三:手指触摸绘画椭圆

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 功能&#xff1a;根据手指触摸绘画一个椭圆路径--> 起点为手指开始触摸时的坐标&#xff0c;终点为手指触摸结束时的坐标 效果图&#xff1a; 组件属性的描述在上一节中描述过了&…

ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

瑶瑶的第K大Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status Practice ACdream 1099Description 一天&#xff0c;萌萌的妹子--瑶瑶(tsyao)很无聊&#xff0c;就来找你玩。可是你们都不知道玩什么。。。尴尬了一阵子&#xff…

开源贡献 计算_如何克服恐惧并为开源做贡献

开源贡献 计算Are you a new developer? Or maybe even just an old-timer who has been in a company for ten years, working on an in-house project, and now you’re thinking, “Hey, I’ve been in my box a long time. What’s new out there?” I have been like th…

Android学习笔记进阶十一图片动画播放(AnimationDrawable)

大家平时见到的最多的可能就是Frame动画了&#xff0c;Android中当然也少不了它。它的使用更加简单&#xff0c;只需要创建一个 AnimationDrawabledF对象来表示Frame动画&#xff0c;然后通过addFrame 方法把每一帧要显示的内容添加进去&#xff0c;并设置播放间隔时间&#xf…

JS 把url的参数解析成对象

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文&#xff1a; 实现思路&#xff1a;请看log和打印结果 // url参数解析 function getUrlkey(url) {var params {};var urls url.split("?"); console.log(1_分割url:,…

Objective-C代码的文件扩展名

转载于:https://www.cnblogs.com/123qw/p/4375299.html

公司成立两周年感言_对我的副项目成立一周年的一些反思

公司成立两周年感言by Will Abramson威尔艾布拉姆森(Will Abramson) 对我的副项目成立一周年的一些反思 (Some reflections on my side project’s first anniversary) My side project turns one this month. It has been a real learning roller coaster.我的副业这个月变成…

2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用

配置成功后的代码分析页面&#xff1a; 可以看到对复杂度、语法使用、重复度等等都做了分析&#xff0c;具体到了每一个方法和每一句代码。 四种使用方式&#xff1a; sonarqube sonar-runnersonarqube mavensonarqube eclipsesonarqube IDE IntelliJ使用方式1 &#xff1a…