浅谈JavaScript函数的四种存在形态


Posted in Javascript onJune 08, 2016

函数的四种存在形态:

1.函数形态

2.方法形态 将函数赋值给某一个对象的成员,那么就称为方法

3.构造器形态

4.上下文形态

1.函数形态:

var foo = function() {
  alert(this);       //this是window
};

2.方法形态:

 

o = {};
o.foo = foo;  //将函数foo赋值给对象o的foo属性
o.foo();    //弹出的是object,此时的this表示object

 

var lib = {
  test:function() {
    alert(this);     //此处的this表示object(lib对象本身)
    //var that = this;  //要想匿名函数中this表示lib对象,可以这样
    (function() {
     alert(this);    //此处的匿名函数不属于lib对象,所以this的任然表示window
    })();
  }
};
lib.test();

3.构造器(构造函数)var p = new Person();

1、new创建了对象,并开辟了空间

2、将对象的引用地址传递给函数,在函数中用this接收

3、构造方法执行结束,返回this

var Person = function() {
  this.age = 19;
  this.name = "Mr靖";
  return "{}";
};

var p = new Person();
alert(p.name);  //弹出的是undefined,由于函数返回的是一个对象,所以直接将这个对象返回给person,而忽略age,name属性
var Person = function() {
  this.age = 19;
  this.name = "Mr靖";
  return 123;
};

var p = new Person();
alert(p.name);  //弹出“Mr靖”,由于返回值不是对象,所以直接忽略返回值
alert(p);      //弹出object

改变的东西有:构造函数改变了函数的返回值;如果函数的返回值是一个对象,那么就按照返回值来返回;如果返回值不是一个对象就忽略返回值,直接返回this;

4.上下文调用模式函数.apply(对象, [参数列表])

var foo1 = function(a, b) {
  alert(this);
  return a > b ? a : b;
};
var num = foo1.apply(null, [112, 34]);   //此时foo1是函数形态,this表示window
num = foo1.apply({}, [112, 34]);      //此时foo1是方法形态,this表示参数中传入的对象{}

函数.call(对象, 参数列表);

var num1 =foo1.call(null,112,34);
num1=foo1.call({},112,34);      //除了参数列表外,其余和apply一样

以上这篇浅谈JavaScript函数的四种存在形态就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
AJAX架构之Dojo篇
Apr 10 Javascript
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
详解angular中的作用域及继承
May 31 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
JavaScript实现简单日历效果
Sep 11 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 #Javascript
关于session和cookie的简单理解
Jun 08 #Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 #Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 #Javascript
JavaScript基础语法之js表达式
Jun 07 #Javascript
JavaScript必看小技巧(必看)
Jun 07 #Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 #Javascript
You might like
PL-880隐藏功能
2021/03/01 无线电
php数据库密码的找回的步骤
2011/01/12 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python的re模块应用实例
2014/09/26 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
python实现随机漫步方法和原理
2019/06/10 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
2014年酒店服务员工作总结
2014/12/08 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
年终工作总结范文
2019/06/20 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android