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和Servlet实现跨域提交请求示例分享
Feb 12 Javascript
jQuery中ajax的load()方法用法实例
Dec 26 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
ES6 Object属性新的写法实例小结
Jun 25 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
Sep 15 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
php mssql 时间格式问题
2009/01/13 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
python3将视频流保存为本地视频文件
2018/06/20 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
线程同步的方法
2016/11/23 面试题
出纳的岗位职责
2013/11/09 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
大课间活动实施方案
2014/03/06 职场文书
购房意向书范本
2014/04/01 职场文书
认识实习感想
2015/08/10 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL