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 获得服务器控件值的方法小结
May 11 Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
基于jQuery实现的美观星级评论打分组件代码
Oct 30 Javascript
easyUI下拉列表点击事件使用方法
May 18 Javascript
vue中子组件调用兄弟组件方法
Jul 06 Javascript
深入理解 JS 垃圾回收
Jun 03 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
JavaScript实现拖拽盒子效果
Feb 06 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python的函数嵌套的使用方法
2014/01/24 Python
Python抓取京东图书评论数据
2014/08/31 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
python实现实时监控文件的方法
2016/08/26 Python
详解python中asyncio模块
2018/03/03 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
python word转pdf代码实例
2019/08/16 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
UML设计模式笔试题
2014/06/07 面试题
如何执行一个shell程序
2012/11/23 面试题
教师岗位职责
2013/11/17 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
离婚协议书的范本
2015/01/27 职场文书
如何撰写促销方案?
2019/07/05 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS