`

Javascript中使用面向对象的编程

阅读更多
http://www.cnblogs.com/seewood/archive/2005/06/24/180740.html
/**
 * 一个js版的继承 多态 封装
 * 继承链 XStudent-->Student-->Person-->Animal->Base
 * 其中添加除了继承过的属性和方法
 * 还添加了一些自己的方法
 */


/**
 * 类,用来创建对象
 * @type 
 */
var Class = {
	create : function() {
		return function() {
			//创建对象的初始化抽象方法
			this.initialize.apply(this, arguments);
		};
	}
};
/**
 * 用来复制对象
 * @param {} desc 目标对象
 * @param {} src  原对象
 * @return {} 目标对象
 */
var Extend = function(desc, src) {
	for (var property in src) {
		desc[property] = src[property];
	}
	return desc;
};
/**
 * 给Object原型添加方法Extend,用来实现继承
 * @param {} obj 需要扩展的数组
 * @return {} 继承后的目标对象
 */
Object.prototype.extend = function(obj) {
	return Extend.apply(this, [this, obj]);//当前对象调用Extend,实现继承功能
};
var Base = Class.create();//创建对象Base
/**
 * Base的原型中指定constructor
 * 实现初始化initialize方法
 * @type 
 */
Base.prototype = {
	constructor : Base,
	initialize : function(v_Name) {
		this.name = v_Name;
	},
	setName : function(v_Name) {
		this.name = v_Name;
	},
	getName : function() {
		return this.name;
	}
};
var Animal = Class.create();//创建Animal
/**
 * 指定Animal原型继承Base,
 * 并重写了初始化方法initialize,
 * 添加age,sex,weigth属性
 * 添加了sleep方法,并给了默认的实现
 * 添加抽象方法eat,walk,say
 */
Animal.prototype = (new Base()).extend({
			constructor : Animal,
			initialize : function(v_Name, v_Age, v_Sex, v_Weight) {
				this.name = v_Name;
				this.weight = v_Weight;
				this.age = v_Age;
				this.sex = v_Sex;
			},
			setAge : function(v_Age) {
				this.age = v_Age;
			},
			getAge : function() {
				return this.age;
			},
			setSex : function(v_Sex) {
				this.sex = v_Sex;
			},
			getSex : function() {
				return this.sex;
			},
			setWeight : function() {
				this.weight = v_Weigth;
			},
			getWeight : function() {
				return this.weight;
			},
			sleep : function() {
				return this.name + "正在睡觉中..";
			},
			abstract : function() {
				this.eat();
				this.walk();
				this.say();
			}
		});
var Person = Class.create();//创建人类
/**
 * 指定人原型对象继承Animal
 * 重写initialize
 * 实现抽象方法eat,walk,say
 * 添加属性address,desc
 */
Person.prototype = (new Animal()).extend({
			constructor : Person,
			initialize : function(v_Name, v_Age, v_Sex, v_Weight, v_Address,
					v_Desc) {
				this.name = v_Name;
				this.weight = v_Weight;
				this.age = v_Age;
				this.sex = v_Sex;
				this.address = v_Address;
				this.desc = v_Desc;
			},
			setAge : function(v_Age) {
				this.age = v_Age;
			},
			setAddress : function(v_Address) {
				this.address = v_Address;
			},
			getAddress : function() {
				return this.address;
			},
			setDesc : function(v_Desc) {
				this.desc = v_Desc;
			},
			getDesc : function() {
				return this.desc;
			},
			eat : function() {
				return this.name + "正在吃肉和一些素食";
			},
			walk : function() {
				return "人类用双脚走路";
			},
			say : function() {
				return "hello!我是" + this.name + ",今年" + this.age + "岁";
			}
		});
var Student = Class.create();//创建Student
/**
 * 指定学生原型对象继承人类
 * 重写initialize, sleep, walk, say
 * 添加公有属性Id
 */
Student.prototype = (new Person()).extend({
			constructor : Student,
			initialize : function(v_Id, v_Name, v_Age, v_Sex, v_Weight,
					v_Address, v_Desc) {
				this.id = v_Id;
				this.name = v_Name;
				this.weight = v_Weight;
				this.age = v_Age;
				this.sex = v_Sex;
				this.address = v_Address;
				this.desc = v_Desc;
			},
			getId : function() {
				return this.id;
			},
			setId : function(v_Id) {
				this.id = v_Id;
			},
			setAge : function(v_Age) {
				this.age = v_Age;
			},
			sleep : function() {
				return this.name + "躺在床上呼呼睡大觉";
			},
			walk : function() {
				return this.name + "正在骑着自行车上学去了!!";
			},
			say : function() {
				return "hello!我是" + this.name + ",是一个学生。";
			}
		});
var XStudent = Class.create();
XStudent.prototype = (new Student()).extend({
			constructor : XStudent
		});

var stu = new XStudent(1, 'fkshl', 25, '男', '55kg', 'yyyyy', '....!!!');
alert(stu.sleep());
alert(stu.constructor);
alert(XStudent.prototype.constructor);

var b = new Base('xx');
alert(b.getName());

var r = new Person('xyz', 25, '男', '55kg', 'yyyyy', '....!!!');
alert(r.sleep());
alert(r.walk());

分享到:
评论

相关推荐

    Javascript面向对象编程.

    在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...

    JavaScript面向对象编程指南.pdf

    JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库

    javascript面向对象编程

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    javascript面向对象编程.pdf

    总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...

    JavaScript学习深入—面向对象编程

    #### 三、面向对象编程在JavaScript中的应用 虽然JavaScript本身并不是一种传统的面向对象语言,但它通过原型继承机制支持OOP。每个对象都有一个原型,原型可以是一个对象,也可以是一个构造函数。通过这种方式,...

    Javascript面向对象编程

    ### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...

    JavaScript面向对象编程指南 pdf

    下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...

    Javascript 中的面向对象编程

    在JavaScript中的面向对象编程中,我们可以使用继承、多态和封装等技术来实现代码的重用和扩展。例如,我们可以使用继承来创建一个子类对象,该对象继承了父类对象的所有属性和方法。 ```javascript function ...

    JavaScript面向对象编程.pdf

    JavaScript面向对象编程.pdf

    JavaScript面向对象编程指南完整版

    JavaScript面向对象编程指南是完整的扫描版...

Global site tag (gtag.js) - Google Analytics