JS调用模式
在
js中,一共4中调用方式。需要注意的是,调用方式中,this的指向问题。
函数调用模式
this丢失,debug会提示未定义相应属性。按照规范,需要将this赋值给that
let myObj = {
value : 1,
double : function(){
let that = this
let _ = function (){
that.value = that.value *2
// this.value = this.value *2 // 内部函数的this被绑定错误值
}
_() // 函数调用模式
}
}
myObj.double() // 方法调用模式
console.log(myObj.value) // 输出2
方法调用模式
在函数调用模式中的
myObj.double()就是方法调用模式,这时,这个函数被保存为对象的一个属性。
构造器调用模式
通过
new来声明,this会被绑定到一个连接prototype的新对象。结合原型链,可以实现很多有趣用法。
function Myobj(value){ // 注意命名规范
this.value = value
}
Myobj.prototype.getValue = function(){
return this.value
}
let myobj = new Myobj(1) // 构造器调用
console.log(myobj.getValue())
apply调用模式
apply:为了动态改变this而出现。结合闭包,可以更方便的实现原型继承
基于上面的例子,我们首先将getValue方法放入单独的文件./util.js下。
./util.js
exports = module.exports = function getValue(arg){
return `${this.value} \n我是参数:${arg} `
}
然后再在需要的文件中引入:
'use strict'
function Myobj(value){
this.value = value
}
Myobj.prototype.getValue = function(arg){
return require('./util').apply(this,[arg]) // apply调用模式
}
let myobj = new Myobj(1)
console.log(myobj.getValue(-1))
如此,优美地实现了组件化,代码逻辑和架构变得更加清晰。
关于apply和call
相同点:
- 作用一样:动态改变
this
不同点:
apply调用方式:func.apply(obj,[arg1,arg2,...]),接受数组参数call调用方式:func.call(obj,arg1,arg2,...),接受连续参数
JS调用模式的更多相关文章
- js 函数的调用模式
1.函数调用 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数.除了函数声明时定义的形参,每个函数还接受两个附加的参数:this和arguments(arguments并不是一个真正的数组, ...
- JS函数的四种调用模式
函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用 函数调用模式中this指全局对象(window) var f1 = function() { alert ...
- js函数之四大调用模式
一.方法调用模式 当一个函数调用保存为一个对象的属性时我们称之为方法调用. var myObject = { value:0, increment:function(inc){ this.value ...
- JS面向对象函数的四种调用模式
函数的四种调用模式 概念 在 js 中,无论是函数, 还是方法, 还是事件, 还是构造器,...这些东西的本质都是函数 函数, 方法, 事件, 构造器,...只是所处的位置不同 这四种模式分别是 函数 ...
- JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)
1. 程序异常 ① try-catch语法 测试异常 try-catch语法代码如下: try { 异常代码; try中可以承重异常代码, console.log(“try”) 出现异 ...
- js中this的四种调用模式
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- js高级-函数的四种调用模式
1.对象方法调用模式 方法内部的this指向当前调用者的对象d 定义类 (构造函数) function Dog (dogName){ //创建一个空对象 让空对象==this this.name ...
- JS高级——函数的调用模式
函数调用模式一共有四种 <script> //1.函数模式 //this指向window全局对象 //2.方法模式 //this指向调用这个方法的对象 //3.构造函数模式 //this ...
- js函数调用模式
1.函数调用 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数.除了函数声明时定义的形参,每个函数还接受两个附加的参数:this和arguments(arguments并不是一个真正的数组, ...
随机推荐
- css概括
CSS:美化页面 层叠样式表 修改标签样式 1.分类:内联 内嵌 外部引用 (1)内联: 写在标签里面,以属性的形式表现 属性名为style (2)内嵌:写在head标签里面,以标签 ...
- Vue 父组件ajax异步更新数据,子组件props获取不到
转载 https://blog.csdn.net/d295968572/article/details/80810349 当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mo ...
- Codeforces Round #499 (Div. 2) C. Fly(数学+思维模拟)
C. Fly time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- Linux pwn入门教程(1)——栈溢出基础
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...
- Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库
版权声明:未经博主允许不得转载 补充 补充上一节,使用ListView是用来显示列表项的,使用ListView需要两个xml文件,一个是列表布局,一个是单个列表项的布局.如我们要在要显示系统所有app ...
- [Swift]LaunchScreen.storyboard如何跳转到到Main.storyboard
在加载App时,首先读取[LaunchScreen.storyboard]中的内容, 在App加载到内存之后,自动读取[Main.storyboard]中的初始视图控制器, 用于替换原来的[Launc ...
- eclipse clean和build作用
由于eclipse的编译是基于时间戳的判断机制的. 因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译. 因此你可以先clean一下再编译.这个时候eclipse ...
- [视频]K8飞刀 SQL注入点脱库演示教程
K8飞刀 SQL注入点脱库演示动画教程 链接:https://pan.baidu.com/s/15gLTxiv9v1Te5QNFZnfV4A 提取码:eaa1
- 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类
BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...
- Django--Ajax 提交
一 什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...