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 相关文章推荐
jQuery Ajax使用 全解析
Dec 15 Javascript
JS面向对象编程浅析
Aug 28 Javascript
用C/C++来实现 Node.js 的模块(二)
Sep 24 Javascript
js解决select下拉选不中问题
Oct 14 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
基于JS代码实现导航条弹出式悬浮菜单
Jun 17 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
May 26 Javascript
google广告之另类js调用实现代码
Aug 22 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
投票管理程序
2006/10/09 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
代码详解javascript模块加载器
2018/03/04 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python处理json数据中的中文
2014/03/06 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
素质拓展感言
2014/01/29 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
个性与发展自我评价
2014/02/11 职场文书
课外活动总结范文
2014/07/09 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
人事任命通知书
2015/04/21 职场文书
付款证明格式范文
2015/06/19 职场文书
学习党史心得体会2016
2016/01/23 职场文书