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 相关文章推荐
js正则表达式的使用详解
Jul 09 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
AngularJS指令详解及示例代码
Aug 16 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
Bootstrap导航条鼠标悬停下拉菜单
Jan 04 Javascript
H5实现中奖记录逐行滚动切换效果
Mar 13 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
JavaScript如何借用构造函数继承
Nov 06 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 checkbox 取值详细说明
2010/08/19 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
使用python3实现操作串口详解
2019/01/01 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
小学毕业感言500字
2014/02/28 职场文书
校庆筹备方案
2014/03/30 职场文书
出生公证委托书
2014/04/03 职场文书
销售人员工作自我评价
2014/09/21 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
浅谈MySQL函数
2021/10/05 MySQL