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 相关文章推荐
jQuery数据显示插件整合实现代码
Oct 24 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
Jul 27 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
Jan 22 Javascript
浅谈Angular路由守卫
Aug 26 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
Vue this.$router.push(参数)实现页面跳转操作
Sep 09 Javascript
vuex的使用和简易实现
Jan 07 Vue.js
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
DOMXML函数笔记
2006/10/09 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
TypeScript入门-接口
2017/03/30 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
详解在vue-cli中使用路由
2017/09/25 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python简明入门教程
2015/08/04 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
linux面试相关问题
2013/04/28 面试题
int和Integer有什么区别
2013/05/25 面试题
设计部经理的岗位职责
2013/11/16 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
天下第一关导游词
2015/02/06 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL