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国旗变换效果代码
Aug 13 Javascript
js中获取事件对象的方法小结
Mar 13 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
原生JavaScript实现合并多个数组示例
Sep 21 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
js实现漂浮回顶部按钮实例
May 06 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
Javascript缓存API
Jun 14 Javascript
自己封装的一个原生JS拖动方法(推荐)
Nov 22 Javascript
js实现点击生成随机div
Jan 16 Javascript
为react组件库添加typescript类型提示的方法
Jun 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实现利用MySQL保存session的方法
2014/08/23 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
jQuery回调方法使用示例
2017/06/26 jQuery
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
用Python识别人脸,人种等各种信息
2019/07/15 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
创新型城市实施方案
2014/03/06 职场文书
初中教师业务学习材料
2014/05/12 职场文书
小学生作文批改评语
2014/12/25 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
学校远程教育工作总结
2015/08/11 职场文书
2019个人工作总结
2019/06/21 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python