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类,兼容IE及Firefox
Jun 23 Javascript
WEB 浏览器兼容 推荐收藏
May 14 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
JavaScript跨域方法汇总
Oct 16 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
Oct 09 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
JS实现简单tab选项卡切换
Oct 25 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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静态方法与非静态方法的用法区别
2016/05/17 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
js转换对象为xml
2017/02/17 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
详解Python自建logging模块
2018/01/29 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
大学生找工作推荐信范文
2013/11/28 职场文书
法律专业求职信
2014/05/24 职场文书
会计师事务所实习证明
2014/11/16 职场文书
工程安全生产协议书
2014/11/21 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书