浅谈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 相关文章推荐
一个用js实现控制台控件的代码
Sep 04 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
Apr 16 Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
AngularJS通过$sce输出html的方法
Sep 22 Javascript
js中创建对象的几种方式
Feb 05 Javascript
详解Angular CLI + Electron 开发环境搭建
Jul 20 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 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
php 中的4种标记风格介绍
2012/05/10 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
用于table内容排序
2006/07/21 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
通过C++学习Python
2015/01/20 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
C++的几个面试题附答案
2016/08/03 面试题
结对共建协议书
2014/08/20 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
同学会感言
2015/07/30 职场文书
Apache POI的基本使用详解
2021/11/07 Servers