javascript 面向对象编程 万物皆对象


Posted in Javascript onSeptember 17, 2009

javascript和java、C#等语言一样也具有面向对象的一些特征,但细比较的时候,会发现这些特征并不是真正的面向对象,很多地方都是利用对象本身来模拟面向对象,所以认为javascript不能算是面向对象编程语言,而是基于对象的语言。
在javascript中真的是万物皆对象,new出来的东西是对象,方法是对象,连类也都是对象。下面分别来看一下对象、方法和类的对象特征。
1.拿内置的Date来看一下吧

var time = new Date(); 
var timeString = time.getFullYear() + "-" + 
time.getMonth() + "-" + 
time.getDate() + " " + 
time.getHours() + ":" + 
time.getMinutes() + ":" + 
time.getSeconds(); 
document.write(timeString);

通过 time来操作其所引用的Date对象,可以方便的调用Date的对象所包含的一系列getXX()方法来获取年月日时分秒等信息。
可以再看一下String
var username = new String("hello world"); 
document.write(username.length);

变量username引用了new出来的字符串对象,通过username访问字符串对象的length属性。
2.方法也是对象
function hello() { 
alert("hello"); 
}; 
var helloRef = hello; 
helloRef();

hello是一个方法,helloRef是一个引用了hello方法的变量,helloRef和hello一样都指向了相同的方法对象。也就意味着helloRef也可以执行,helloRef()。同理也可以写出以下代码。
var helloRef = function() { 
alert("hello"); 
}; 
helloRef();

function(){alert(“hello”)}是一个匿名方法,当然也是对象,用helloRef变量引用该方法对象后,可以通过helloRef来调用方法。
3.那么类呢?当然类也是对象,在javascript中,不像C#或java那样有class关键字用来创建类,而是直接使用方法的关键字来创建类或者叫模拟类。
function Person(username, age) { 
this.Name = username; 
this.Age = age; 
this.Introduce = function() { 
alert("我叫" + this.Name + ",今年" + this.Age + "岁了。"); 
}; 
}; 
var person1 = new Person("张三", 20); 
person1.Introduce();

以上创建了一个Person类型,Person带有构造参数username和age,通过创建的Person对象可以调用Person所包含的方法Introduce。下面对代码做一些修改。
function Person(username, age) { 
this.Name = username; 
this.Age = age; 
this.Introduce = function() { 
alert("我叫" + this.Name + ",今年" + this.Age + "岁了。"); 
}; 
}; 
var PersonClass = Person; 
var person1 = new PersonClass("张三", 20); 
person1.Introduce();

重新声明新的变量PersonClass并引用Person类,PersonClass和Person都指向了原来的Person所引用的类,所以也可以用PersonClass来创建对象。
以上的几个例子可能不是很恰当,但也可以一窥javascript中万物皆对象。
下一节详细的谈一谈javascript中的对象。
Javascript 相关文章推荐
Javascript优化技巧(文件瘦身篇)
Jan 28 Javascript
Javascript的一种模块模式
Mar 22 Javascript
javascript 动态修改样式和层叠样式表代码
Apr 27 Javascript
Extjs4中的分页应用结合前后台
Dec 13 Javascript
Js为表单动态添加节点内容的方法
Feb 10 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
Apr 26 Javascript
Postman动态获取返回值过程详解
Jun 30 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 Javascript
javascript 面向对象编程 function也是类
Sep 17 #Javascript
类似CSDN图片切换效果脚本
Sep 17 #Javascript
var与Javascript变量隐式声明
Sep 17 #Javascript
html数组字符串拼接的最快方法
Sep 16 #Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 #Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 #Javascript
不安全的常用的js写法
Sep 15 #Javascript
You might like
用缓存实现静态页面的测试
2006/12/06 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
python 利用栈和队列模拟递归的过程
2018/05/29 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
2014年预算员工作总结
2014/12/05 职场文书
升学宴学生答谢词
2015/01/05 职场文书
市级三好生竞选稿
2015/11/21 职场文书
初中美术教学反思
2016/02/17 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript