javascript 面向对象function详解及实例代码


Posted in Javascript onFebruary 28, 2017

javascript 面向对象function详解

    js中的函数有三种表示方式:

//函数的第一种表示方式:函数关键字的方式 
function f1() { 
  alert("f1"); 
} 
//函数的第二种表示方式:函数字面量的方式 
var f2 = function() { 
  alert("f2"); 
} 
//函数的第三种表示方式:构造函数的方式 
var f3 = new Function('var a = 100; b = 200; return a+b;'); 
alert(f3());

       函数的定义方式一般有以上三种,前两种方式基本没什么区别,第三种定义方式(Function()构造函数)每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。一般不会采用第三种方式。

另外,分别执行alert(f1.constructor); alert(f2.constructor); alert(f3.constructor);都会出现同样的效果,如下:

javascript 面向对象function详解及实例代码

f1.constructor,f2.constructor,f3.constructor都是一个对象,为Function,这里可以这样理解,这三个函数f1,f2,f3都是通过Function的形式产生的,所以他们的构造器就是Function,由此也可以推出这三种函数的产生方式其实内部原理是一样的。

在JavaScript中,每个具有原型的对象都会自动获得constructor属性。对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。实际上,在js中,每一个function都是一个Function Object。

javascript 面向对象function详解及实例代码

总结:

1、在js中一切皆对象;

2、在js中对象有一个属性为constructor;

3、在js中,凡是函数都是构造器对象

另外,从面向对象的角度来理解,上面实例中f1是一个函数,同时它也是一个对象,constructor可以理解为它的一个属性,并且这里可以利用该对象的constructor属性找到它的构造函数。

可以为f1这个对象动态的添加属性:

//给f1对象添加一个属性为b,值为5 
f1.b = 5; 
alert(f1.b); 
//给f1对象添加一个属性为bb,bb为对象,值为var f2 = function() { alert("f2");} 
f1.bb = f2; 
alert(f1.bb);

在js中,任何一个对象都有可能成为另一个对象的属性。

一个对象可以动态的添加任何一个属性,但是这个对象必须有值,不能是null和undefined。

function Person() { 
  //do something 
} 
function P() { 
  //do something 
} 
function A() { 
  //do something 
} 
function B() { 
  //do something 
} 
Person.a = P; 
Person.a.b = A; 
Person.a.b.c = B; 
Person.a.b.c.d = f2; 
alert(Person.a.b.c.d); //正确,因为Person.a.b.c是有值的 
alert(Person.a.b.c.d.e.f); //错误,不能为Person.a.b.c.d.e增加属性f,因为Person.a.b.c.d.e是undefined

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript cookie解码函数(兼容ff)
Mar 17 Javascript
24款非常有用的 jQuery 插件分享
Apr 06 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
Sep 25 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
ECMAScript6中Map/WeakMap详解
Jun 12 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
JavaScript中this的四个绑定规则总结
Sep 26 Javascript
bootstrap PrintThis打印插件使用详解
Feb 20 Javascript
Angular中自定义Debounce Click指令防止重复点击
Jul 26 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
JavaScript实现筛选数组
Mar 02 Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 #Javascript
原生js实现鼠标跟随效果
Feb 28 #Javascript
canvas实现简易的圆环进度条效果
Feb 28 #Javascript
JS实现的tab切换选项卡效果示例
Feb 28 #Javascript
jQuery Pagination分页插件使用方法详解
Feb 28 #Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 #Javascript
canvas红包照片实例分享
Feb 28 #Javascript
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
初识PHP中的Swoole
2016/04/05 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP多进程编程实例详解
2017/07/19 PHP
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python 含参构造函数实例详解
2017/05/25 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
python查询mysql,返回json的实例
2018/03/26 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python实现石头剪刀布小游戏
2021/01/20 Python
python绘制雪景图
2019/12/16 Python
浅谈python出错时traceback的解读
2020/07/15 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
个人求职简历中英文自我评价
2013/12/16 职场文书
经理岗位职责
2015/02/02 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python