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 上下滚动广告
Jun 17 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
jQuery实现视频作为全屏幕背景
Dec 18 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
详解js的事件处理函数和动态创建html标记方法
Dec 16 Javascript
基于JS设计12306登录页面
Dec 28 Javascript
JavaScript实现分页效果
Mar 28 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
vue-cli的工程模板与构建工具详解
Sep 27 Javascript
vue视图不更新情况详解
May 16 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
中国好声音华少广告词
2014/03/17 职场文书
怎样填写就业意向
2014/04/02 职场文书
文化建设工作方案
2014/05/12 职场文书
公共场所禁烟标语
2014/06/25 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
安全保证书
2015/01/16 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
医院见习总结
2015/06/24 职场文书
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python