javascript函数调用的各种方法!!
在JavaScript中一共有下面4种调用方式:
(1) 基本函数调用
(2)方法调用
(3)构造器调用
(4)通过call()和apply()进行调用
1. 基本函数调用
普通函数调用模式,如:
1
2
3
4
|
function fn(o){
……
}
fn({x:1});
|
在基本函数调用中,
(1)每个参数作为实参传递给声明函数时定义的形参;
(2)this被绑定到全局变量(直接调用一般指的是window)
1
2
3
4
5
6
7
8
9
10
|
var object = {value:1};
var value = 2;
object.printProps = function (){
var printValue = function (){
console.log( this .value);
};
printValue();
console.log( this .value);
}
object.printProps();
|
此时的运行结果是:
2
1
在printValue()函数在执行时,this.value值为2,也就是说,this指向的是全局对象,而不是对象object。
(3)返回值:函数的返回值成为调用表达式的值。
I. 如果函数返回是解释器到达结尾,也就是没有执行到return XXX的语句。返回值为undefined。
II. 如果函数返回是因为接受器执行到return xxx语句, 返回return之后的值。
III. 如果return语句后没有值,即return,则返回undefined。
2. 方法调用
当一个函数被保存为对象的一个属性时,称为方法。
(1)参数和返回值的处理与函数调用一致;
(2)调用上下文this为该对象
1
2
3
4
5
6
7
8
9
10
11
|
function print(){
console.log( this .value);
}
var value=1;
var object = {value:2};
object.m = print;
//作为函数调用
print();
//作为方法调用
object.m();
|
运行结果为:
1
2
当调用print时,this绑定的是全局对象,打印全局变量value值1。
但是当调用object.m()时,this绑定的是方法m所属的对象Object,所以打印的值为Object.value,即2。
3. 构造器调用
函数或方法调用之前带有关键字new,它就构成构造函数调用。如:
1
2
|
function fn(){……}
var obj = new fn();
|
(1)参数处理:一般情况构造器参数处理和函数调用模式一致。但如果构造函数没用形参,JavaScript构造函数调用语法是允许省略实参列表和圆括号的。
如:下面两行代码是等价的。
1
2
|
var obj = new Object();
var obj = new Object;
|
(2)函数的调用上下文为新创建的对象。
1
2
3
4
5
6
7
8
9
10
|
function fn(value){
this .value =value;
}
var value =1;
var obj = new fn(2);
console.log(value);
console.log(obj.value);
fn(3);
console.log(value);
console.log(obj.value);
|
运行结果:
1
2
3
2
I. 第一次调用fn()函数是作为构造函数调用的,此时调用上下文this被绑定到新创建的对象obj。所以全局变量value值不变,obj新增一个属性value,值为2;
II. 第二次调用fn()函数是作为普通函数调用的,此时调用上下为this被绑定到全局对象,在浏览器中为window。所以全局对象的value值改变为3,而obj的属性值不变。
(3)构造函数通常不使用return关键字,返回值为新对象。而如果构造函数显示地使用return语句返回一个对象,那么调用表达式值就为这个对象。如果构造函数使用return语句但没有指定返回值或者返回一个原始值,则忽略返回值,同时使用新对象作为调用结果。
4.通过call()和apply()进行调用
虽然在一个独立的函数调用中,根据是否是strict模式,this指向undefined或window,不过,我们还是可以控制this的指向的!要指定函数的this指向哪个对象,可以用函数本身的apply()或call()方法,它们都是接收两个参数。
call()方法使用它自有的实参列表作为函数的实参,apply()方法要求以数组的形式传入参数
apply方法第一个参数是改变后的调用对象,第二个参数是将函数参数以数组形式传入[ ],而call()第一个参数与call()方法相同,第二个参数是原来参数序列......。
转载于:https://www.cnblogs.com/msidevs/p/6058232.html
javascript函数调用的各种方法!!相关推荐
- Javascript函数调用的四种方法
2019独角兽企业重金招聘Python工程师标准>>> 一.方法调用模式 函数作为对象的属性时,称为方法.此时函数(即方法)中的this对应是该对象. var myObject = ...
- 【学习笔记】Javascript函数调用
Javascript函数调用 函数调用 函数定义后,并不会自动执行,需要通过调用来实现.在JS中调用通常有四种方式: 函数调用模式: 方法调用模式: 构造器调用模式: apply.call调用模式: ...
- JavaScript函数调用规则
JavaScript函数调用规则一 (1)全局函数调用: function makeArray( arg1, arg2 ){ return [this , arg1 , arg2 ]; } 这 ...
- javascript操作数组的方法大全
javascript操作数组的方法大全 一.ES5数组的方法 1.Array.isArray() 用来判断是否为数组 var arr = [1, 2, 3, 4, 5]; var obj = {}; ...
- javascript调用java的方法
这篇文章主要讲述如何在JavaScript脚本语言中调用Java类和接口,对大家的学习和工作有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧. 前言 本文中所有的代码使用 JavaScript 编 ...
- JavaScript对象属性及方法
JavaScript对象属性及方法 1.对象属性 JavaScript对象时属性变量的容器,以键值对name:value的形式存在,访问方式为 name.value name[value] 2.对象方 ...
- Javascript中二进制数据处理方法
Javascript中二进制数据处理方法 转载于:https://www.cnblogs.com/motadou/archive/2012/02/19/2358514.html
- 在js中加html_在HTML文档中嵌入JavaScript的四种方法
在HTML里嵌入JavaScript 在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内嵌,放置在标签之间 (少): 2.放置在有 3.放置自HTML事件处理程序中,该事件处理程 ...
- 创建JAVASCRIPT对象3种方法
创建JAVASCRIPT对象3种方法 方法一:直接定义并创建对象实例 var obj = new Object(); //创建对象实例 //添加属性obj.num = 5; //添加属性 o ...
最新文章
- SQL SERVER中强制类型转换cast和convert的区别
- SAP Spartacus 单元测试开发规范
- Angular workspace默认的packages
- 【Python基础入门系列】第03天:Python 变量与数据类型
- Leetcode 209.长度最小子序列(滑动窗口)
- Android Jetpack 之 ViewModel
- android 中 FLAG_SHOW_WHEN_LOCKED 的用法及解释
- 测试“测试”的“测试”
- 如何卸载jdk_Java新手怎样安装JDK,手把手教你如何安装JDK
- spark读写Oracle、hive的艰辛之路(一)
- 编码的奥秘:存储器组织
- PDMS中如何设置颜色规则
- 酒店机器人:酒店增收提质的新引擎
- Win10安装jdk11及环境变量配置
- 无聊之时用css3自制了好看的button样式和input样式
- 联合概率 条件概率 边缘概率之间关系
- switch语句及其嵌套
- 2007中文网志年会印象
- 以flv.js框架为基础,替换flv格式视频
- linux qq x64,QQ Linux 版时隔多年再次更新,支持 x64、ARM64 等多种架构
热门文章
- 【POJ - 1456】Supermarket (贪心,优先队列 或并查集)
- 【Codeforces - 632C】The Smallest String Concatenation (对string巧妙排序)
- Thymeleaf模板引擎处理日期输入框回显问题type=“date“类型的坑 和 单选按钮、复选框的回显
- java 单例 饿汉式_Java-单例设计模式(懒汉与饿汉)
- oracle命令行打不开,关于oracle命令行上下左右键没法使用解决办法
- nodejs复制服务器文件,nodejs文件夹深层复制功能
- html中选择省份城市,省份、城市、区县三级联动Html代码
- 苏州大学实验报告模板C语言,苏州大学实验报告-实验flash在线编程实验
- 最强阿里巴巴历年经典面试题汇总:C++研发岗
- 关系数据库——视图/存储过程/触发器