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编程起步(第四课)
Feb 27 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
用jquery设置按钮的disabled属性的实现代码
Nov 28 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
微信小程序扫描二维码获取信息实例详解
May 07 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
vue 中的动态传参和query传参操作
Nov 09 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/12/14 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
vue实现登录功能
2020/12/31 Vue.js
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
市场营销个人求职信范文
2014/02/02 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
党员剖析材料范文
2014/09/30 职场文书
出国留学单位推荐信
2015/03/26 职场文书
Python 全局空间和局部空间
2022/04/06 Python