在学习js面向对象编程之前,首先须要知道什么是面向对象。面向对象语言都有类的概念,通过它能够创建具有同样属性和方法的对象。但js并没有类的概念,因此js中的对象和其它语言的对象有所不同。

js对象能够定义为:”无需属性的集合,其属性能够是基本值、对象和函数。每一个对象都是基于一个引用类型创建的。

js创建对象有下面两种方法:

1、创建一个Object实例:

var person = new Object();

2、使用对象字面量:

 var person ={};

3、工厂模式:

  function createPerson(name,age,job){
var p = new Object();
p.name=name;
p.age=age;
p.job=job;
return p;
}
var p1=createPerson("jack",22,“front-end Engineer");
var p2=.....;

4.构造函数模式:

 function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function(){alert(this.name);};
}
var p1= new Person("jack",22,"front-end Engineer");
var p2=...;

这里暂停一下,由于构造函数模式比較重要,这里解释一下:这里实际上是经历了下面4个步骤:

(1)创建一个对象;

(2)将构造函数作用域赋给这个对象(所以this将指向这个新创建的对象)

(3)运行里面的代码,为新对象加入属性;

(4)返回新对象;

上面创建的p1和p2都有一个constructor的属性,它指向Person。而且p1和p2即使Person的实例,同一时候也是Object的实例,由于全部对象都继承自Object。

缺陷:每一个方法都要在实例上又一次创建一遍,js中的函数是对象,因此能够将函数转移到构造函数的外部:

 function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=sayName;
}
fucntion sayName(){
alert("this.name");
}
var p1=.....;
var p2=....;

5.原形模式:

我们创建的函数都有一个prototype属性,它是一个指向一个对象的指针。

6.抽象函数:

Object.extend=function(destination,source){
for(property in source){
destination[property]=source[property];
}
return destination;
}
//定义一个抽象基类base,无构造函数
function base(){}; base.prototype={
initialize:function(){
this.oninit();//调用了一个虚方法
}
}
function SubClassA(){
//构造函数
}
SubClassA.prototype=Object.extend({
propInSubClassA:"propInSubClassA",
oninit:function(){
alert(this.propInSubClassA);
}
},base.prototype); function SubClassB(){
//构造函数
}
SubClassB.prototype=Object.extend({
propInSubClassB:"propInSubClassB",
oninit:function(){
alert(this.propInSubClassB);
}
},base.prototype); var objA=new SubClassA();
objA.initialize();//输出"propInSubClassA" var objB=new SubClassB();
objB.initialize();//输出"propInSubClassB"

javascript面向对象程序设计的更多相关文章

  1. JavaScript 面向对象程序设计(下)——继承与多态 【转】

    JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...

  2. JavaScript面向对象程序设计:数组

    或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的.   1. 创建数组   在J ...

  3. javascript面向对象程序设计系列(一)---创建对象

    javascript是一种基于对象的语言,但它没有类的概念,所以又和实际面向对象的语言有区别,面向对象是javascript中的难点之一.现在就我所理解的总结一下,便于以后复习: 一.创建对象 1.创 ...

  4. [TimLinux] JavaScript 面向对象程序设计

    1. 面向对象 面向对象语言有一个标志:都有类的概念.通过类可以创建任意多个具有相同属性和方法的对象.ECMAScript中没有类的概念,因此JavaScript中的对象夜雨基于类的语言中的面向对象有 ...

  5. javascript——面向对象程序设计(4)

    <script type="text/javascript"> //1.继承 //2.原型链 //3.借用构造函数 //4.组合继承 //5.原型式继承 //6.寄生式 ...

  6. javascript——面向对象程序设计(3)

    <script type="text/javascript"> //1.结合使用构造函数模式和原型模式 //2.动态原型模式 //3.寄生构造函数模式 //4.稳妥构造 ...

  7. javascript——面向对象程序设计(2)

    <script type="text/javascript"> //1.理解原型对象 //2.原型与in操作符 //3.更简单的原型语法 //4.原型的动态性 //5. ...

  8. javascript——面向对象程序设计(1)

    <script type="text/javascript"> //ECMA-262把对象定义为:“无序属性的 集合,其属性可以包含基本值.对象或者函数” //理解对象 ...

  9. javascript 面向对象程序设计--深刻理解对象

    javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...

随机推荐

  1. C++多继承的好处是增加了弹性和灵活性,Delphi类强迫单继承TObject是为了提供许多强大功能

    要说灵活性,是C++更强.我自己开发已经好几次碰到需要多继承的情况了. 但是Delphi强迫继承TObject,虽然是单继承,但是提供了相当多的强力功能.要说强大,那还是Delphi当仁不让. 摘自& ...

  2. WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)

    原文:WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话 ...

  3. Android KeyCode(官方)

    Constants public static final int ACTION_DOWN Added in API level 1 getAction() value: the key has be ...

  4. GDI+: Curved Shapes

    原文 http://www.functionx.com/vcsharp2003/gdi/curves.htm Curves   Introduction to Curves   A curve is ...

  5. Windows Azure 安全最佳实践 - 第 5 部分:基于Claim 的标识,单点登录

    基于Claim的身份标识是处理网站与 Web 服务的身份认证和访问一种简单而强大的方式,无论您是在本地工作还是面向云工作.您可以通过减少自定义实施和使用基于Claim的单一简化标识模型,创建更安全的应 ...

  6. 能够返回运行结果的system函数加强版本号

    /*********************************************************************  * Author  : Samson  * Date   ...

  7. Effective C++_笔记_条款07_为多态基类声明virtual析构函数

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 这个规则只适用于polymorphic(带多态性质的)base ...

  8. Servlet的学习之Session(3)

    在上一篇<Servlet的学习之Session(2)>我们知道了Session能实现一个会话过程中保存数据或者多个会话中实现同一个Session的关键因素就是Cookie,只是Cookie ...

  9. Servlet的学习之Session(1)

    在学习完了Servlet中的Cookie技术后,我们再来学习另一个能保存会话数据的技术——Session. Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其 ...

  10. Servlet的学习之Request请求对象(2)

    在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...