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入门教程(2) JS基础知识
Jan 31 Javascript
JQuery与Ajax常用代码实现对比
Oct 03 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
优化Node.js Web应用运行速度的10个技巧
Sep 03 Javascript
JQuery节点元素属性操作方法
Jun 11 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
jQuery焦点图轮播效果实现方法
Dec 19 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
jquery dialog获取焦点的方法
Feb 09 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 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调用数据库的存贮过程
2006/10/09 PHP
详细介绍PHP应用提速面面观
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
php smarty函数扩展
2010/03/15 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
代码分析vue中如何配置less
2018/09/28 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现simhash算法实例
2014/04/25 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
拓展培训心得体会
2014/01/04 职场文书
致接力运动员广播稿
2014/02/17 职场文书
考核工作实施方案
2014/03/30 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
失职检讨书大全
2015/01/26 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL