javascript面向对象程序设计

       在学习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"
时间: 2025-01-24 18:40:01

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

javascript面向对象程序设计高级特性经典教程(值得收藏)_javascript技巧

本文实例讲述了javascript面向对象程序设计的高级特性.分享给大家供大家参考,具体如下: 1.创建对象的三种方式: 第一种构造法:new  Object var a = new Object(); a.x = 1, a.y = 2; 第二种构造法:对象直接量 var b = { x : 1, y : 2 }; 第三种构造法:定义类型 function Point(x, y){ this.x = x; this.y = y; } var p = new Point(1,2); 2.访问对象

JavaScript面向对象程序设计教程_javascript技巧

JavaScript中对象的定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.可以把对象想象成散列表,就是一组名值对(key:value),其中值可以是数据或函数,每个对象都是基于一个引用类型创建的. 理解对象 前面的博客里写过创建对象的方式有两种,一种是创建一个object的实例,另一种是使用对象字面量法: var person = new Object(); person.sex = man; person.name = bluce person.age = 58; person.

JavaScript面向对象程序设计(5) 类

类是面向对象程序设计的核心概念之一.一个类代表了具有相似属性的一类事物的抽象.从本篇开始 ,我们将正式的进入JavaScript的面向对象部分.首先需要注意的是,在JavaScript中并没有"类 "这一关键字--在大多数语言中都是使用class作为关键字的.所以,这里的类就成 了一个概念,它没有明确的语法标志. 1.类和构造函数 前面说过,在JavaScript中并没有明确的类的概念.实际上,我们给出的只是类的构造函数.类的构 造函数构成了这个类的全部内容.既然叫做构造函数,它也是一

JavaScript面向对象程序设计(3) 对象

1.对象 对象是面向对象程序设计的基础概念之一,只需看看这个名字就已经知道了.在我们 熟悉的面向对象语言中,比如Java或者C++,都有着类似的对象定义方法.比如,我们想定义一个类,名 字叫Person,有两个属性:name和age,另外有一个方法,将显示出这个Person对象的名字和年龄,那么 我们可以用下面的代码实现: Java: public class Person { private String name; private int age; public String getName

JavaScript面向对象程序设计(1) 前言

基于对象还是面向对象? 面向对象技术是现代软件开发中的重要技术之一.面向对象变成的好处毋庸置疑,现在的主流语言如 Java.C++都是面向对象的.现在的面向对象理论更多的是使用Java或C++进行描述,究其根源,在于这 些语言都是传统的面向对象语言,具有面向对象理论所指明的一切特性:类.封装.继承.多态等等. 相比而言,一些动态语言如JavaSript就显得不那么面向对象--至少,在JavaScript中 并没有类class这一关键字.但是,在JavaScript中并不是没有类的概念.于是有人说

JavaScript面向对象程序设计(2) 数组

或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为--其间的种种 关系吧--嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样 子的. 1.创建数组 在JavaScript中有很多创建数组的方法.比如使用Array函数.不过 这不是现在我们要讲述的.现在我们使用简单的方括号"[]"的办法来创建数组. var objAyyar = []; // 1 var objAyyar = [2]; // 2 var objAyyar = ["a&q

JavaScript面向对象程序设计(8) 优雅的封装还是执行的效率?

优雅的封装还是执行的效率?这是一个悖论. 优雅封装的程序看起来是那么的美妙:每个属性被隐藏在对象之后,你所能看到的就是这个对象让你 看到的,至于它到底是怎么操作的,这个不需要你操心. 执行的效率就是另外一回事.就像是C语言和面向对象的C++之间的差别:C++很优雅,但是执行效率 ,无论是编译后的二进制代码还是运行期的内存的占用,都要比简单的C语言多出一截来. 这个问题在脚本语言中显得更加重要,因为JavaScript根本就是一种解释语言,解释语言的执行效率 要比编译语言低很多. 1.优雅的封装

JavaScript面向对象程序设计(6) 封装

封装是面向对象的重要概念之一.如果一个程序没有封装性,也就谈不上什么面向对象.但是, JavaScript并不像其他的语言,比如 Java,有公有变量和私有变量等:在JavaScript中只有一种作用域 :公有作用域.在本章中,我们将会见识到JavaScript是如何实现封装的特性的. 1.this和公 有变量 首先需要理解this关键字.看下面的一段代码,你应该对此感到熟悉: function Person(name, age) { this.name = name; // 定义一个公有变量

javascript面向对象:JavaScript面向对象程序设计(4): 函数

在很多语言中,函数(Java里面成为方法)和对象时截然不同的两种东西.函数被定义为对象的动作,或者是全局的(像在C++中的main函数一样).但是在JavaScript中,函数和对象的界限却显得不那么明显.1. 函数的定义JavaScript中有很多种定义函数的方法:function hello() { alert("Hello!"); }var hello1 = function() { alert("Hello!"); };var hello2 = new Fu

JavaScript面向对象程序设计(7) 闭包

1.什么是闭包? 什么是闭包?一种正式的解释是:所谓闭包,指的是一种拥有很多变量并且绑定了这些变量的环境的 表达式(通常是一个函数),因而这些变量也是这个表达式的一部分. 相信很多人都不会理解这个定义,因为他的学术味道太浓了--或许你喜欢从字面的语法 上进行分析:首先,它是一个表达式,这个表达式绑定了很多变量以及这些变量的环境.不过这并没有 什么意义,这依然不会告诉我们什么是闭包. 那么,来看一个例子: function add(a) { return function(b) { return