说到js,非常大一部分人会说我非常熟悉,在日常的web开发中经经常使用,那么你的js代码是符合面对对象思路的吗?那你会问我面向过程的js代码有什么不好吗?我的感受是面对对象的js编码更加简洁,降低了混乱,可维护行增强,适合编写富client时应用。

好了,首先看看js里怎样定义对象:

<html>
<head>
<script type="text/javascript"> var obj=new Object();
obj.name='josh';
obj.age='26';
console.log(obj.name);
console.log(obj.age); </script>
</head>
<body>
</body>
</html></span>

大家能够用firebug的console看下执行结果。在这段很easy的代码中。我们new了一个Object型的对象,假设学过像java或C#这样面向对象语言的人,对这种对象定义方式一定很熟悉,仅仅只是开头的变量定义换成了var,这是因为js是弱类型的缘故。

Object类型属于js的内置对象类型,定义了obj之后,我们给obj的name和age属性进行了赋值。

这里须要注意的事,js的对象能够动态加入属性和方法。不像java,对象仅仅能包括类的内容。我们在上面的代码中再加入两个方法:

var obj=new Object();
obj.name='josh';
obj.age='26';
obj.getName=function(){
return this.name;
}
obj.getAge=function(){
return this.age;
}
console.log(obj.getName());
console.log(obj.getAge());

既然能加入,也能删除:

var obj=new Object();
obj.name='josh';
obj.age='26';
obj.getName=function(){
return this.name;
}
obj.getAge=function(){
return this.age;
}
delete obj.age;
delete obj.getAge;
console.log(obj.age); //undefined
console.log(obj.getAge()); //obj.getAge is not a function

那么js对象的动态加入属性方法的机制是什么呢?在最根本的层面上,js对象是一个属性的集合,很类似于其它语言中的哈希表,或者在java里更为经常使用的map,因此我们能够再使用的不论什么时候。动态的加入属性或方法。

在js中,对象被觉得是引用类型。为不同的变量赋同样对象的话,那么运行的就是同一对象

var obj=new Object();
obj.name='josh';
obj.age='26';
obj.getName=function(){
return this.name;
}
obj.getAge=function(){
return this.age;
}
obj1=obj;
obj.age='30';
console.log(obj1.getAge());

好了,上面的用的object对象,属于js的内置对象,除了Object类型还有Function。Array。Date,Error,Regexp,这些内置对象类型都属于引用类型

var func=new Function('console.log("Hi");');
var arr=new Array('Eric','lisa','josh');
var date=new Date();
var error=new Error("something bad happen");
var reg=new RegExp('\\d+');

js还提供了5中原始类型:各自是Boolean,Number,String。Null,Undefined。

//string
var name='Eric';
var selection='a'; //number
var num=10;
var f=1.1; //boolean
var flag=false; //null
var obj=null; //undefined
var ref;

大家须要知道的事,Number类型既能够包括整形。也能够包括浮点型。

这里也须要说说null和undefined的差别,undefined表示变量定义了。但未初始化,null表示对象不存在。

之所以介绍原始类型,是由于大家寻常会见到这种代码:

var name='Eric';
var lowcasename=name.toLowerCase(); //eric
var fistLetter=name.charAt(0); //E

就是在原始类型的的变量上调用了方法。这事实上是js的内容为我们实现了一个装箱的机制

var name='Eric';
// 将原始类型使用new建立了一个相应的对象类型
var temp=new String(name);
var lowcasename=temp.toLowerCase(); //eric
var fistLetter=temp.charAt(0); //E

除了上述使用new的方式简历对象,还能够使用literal Form(字符串)的方式

//new object 的方式
var obj=new Object();
obj.name='josh';
obj.age='26';
obj.getName=function(){
return this.name;
}
obj.getAge=function(){
return this.age;
} //literal Form
var obj1={
name:'josh',
age:'26',
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
} //new Array的方式
var arr=new Array('Eric','lisa','josh');
//literal Form
var arr1=['Eric','lisa','josh'];

至此,本文讲了 js对象动态增删属性及其机制,js的内置原始类型和引用类型 还有对象的两种定义方式。有了这些基础。我们后将陆续解说js对象的方方面面。包含继承、封装和多态。

js面对对象编程的更多相关文章

  1. js面对对象编程(二):属性和闭包

    上篇博客中解说了一些js对象的基本概念和使用方法.这篇博客解说一下js属性方面的:公有属性.私有属性,特权方法. 假设学过java.公有属性.私有属性,特权方法(即能够訪问和设置私有属性的方法)一定非 ...

  2. 对js 面对对象编程的一些简单的理解

    由简单开始深入: 最简单的 直接对象开始 var desen = { age:24, name:'xyf', job:'fontEnd', getName:function(){ console.lo ...

  3. python面对对象编程----2:__init__

    面对对象编程估计我们最早接触到的就是__init__了,也就是实例的初始化处理过程: 1:来看看最基础的__init__ class Card(object): #抽象类Card,并不用于实例化 de ...

  4. 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

    一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...

  5. Python学习6——再谈抽象(面对对象编程)

    1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...

  6. C++ 基础语法 快速复习笔记---面对对象编程(2)

    1.C++面对对象编程: a.定义: 类定义是以关键字 class 开头,后跟类的名称.类的主体是包含在一对花括号中.类定义后必须跟着一个分号或一个声明列表. 关键字 public 确定了类成员的访问 ...

  7. Day-8: 面对对象编程

    面对过程的程序设计方法意在将函数分成子函数,再依次调用这些函数来解决问题. 而面对对象的程序设计方法,来源于自然界,类是实例的抽象,实例是类的具体.自定义出来的对象是类,而所有的数据都可以看成是对象, ...

  8. 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

    面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END

  9. 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程

    该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...

随机推荐

  1. idea 热部署

  2. Hibernate框架中的HibernateUtil

    对于刚学习三层框架的人来说.每个配置文件和每个类.以及功能来说都非常新奇,时常就忘记了相关类的功能. 在这里建议编程就是要多加练习,才干熟能生巧. 这里说一下HibernateUtil类,在使用Hib ...

  3. 网络设备 | Cisco设备镜像文件损坏无法启动处理(tftp + rommon模式)

    从正常的设备上通过tftp下载.bin镜像(G0/0口与pc设置同一网段互通) 进入坏的路由器rommon模式 在没有IOS情况下,默认进入了ROMMON模式:在ROMMON模式下输入以下命令设置f0 ...

  4. jq:jq开头为什么那么写

    转自:http://holysonll.blog.163.com/blog/static/2141390932013411112823855/ 用jQ的人很多人都是这么开始写脚本的: $(functi ...

  5. NSMutableAttributedString 的使用方法,设置格式

    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:title]; NS ...

  6. BIOS截图中文

  7. Android中ListView分类

    1 http://my.oschina.net/bv10000/blog/106436 2

  8. Python script to create Screen from all Items/Graphs of a host

    #!/usr/bin/env python import urllib2 import json import argparse def authenticate(url, username, pas ...

  9. Debian NAT共享上网

    如果Linux主机有两个网卡,比如一个有线.一个无线,当无线连接后,其他机器即可通过有线共享上网,为了方便叙述,假设环境如下: A机器有两块网卡,eth0和ws0,其中ws0为无线网卡,已连接wifi ...

  10. jquery validate 详解

    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库 <script src=&qu ...