`

javascript面向对象编程----类的定义

 
阅读更多

最简单的javascript类的实现,

缺点所有属性都是公开的

 

window.onload = function() {
	var someone = new Person("someone");
	var sb = new Person("sb", 99);

	someone.setName("wod").setAge(100).showInfo();
	// alert(typeof Person);//function
	// alert(typeof someone);//object
};

/*******************************************************************************
 * class Person
 ******************************************************************************/
var Person = function(name, age) {
	if (name == undefined)
		throw new Error("构造器需要 name参数");

	this.setName(name);
	this.setAge(age);
};

Person.prototype = {
	getName : function() {
		return this.name;

	},
	setName : function(name) {
		this.name = name;
		return this;// 能够链式调用
	},
	getAge : function() {
		return this.age;

	},
	setAge : function(age) {
		if (age < 0 || age > 120)
			throw new Error("invalid Person age");// 简单check
		this.age = age || 20;// 构造器无age参数时,默认值20
		return this;

	},
	showInfo : function() {
		return this.name + "'s" + " age is " + this.age + " years old.";
	}
};

 

 

 

用闭包实现带有私有成员的类

 

window.onload = function() {
	var someone = new Person("t");
	var sb = new Person("sb", 99);

	var bbb = someone.setAge(12).showInfo();
	alert(bbb)
};

/*******************************************************************************
 * class Person
 ******************************************************************************/
var Person = function(newName, newAge) {
	if (newName == undefined)
		throw new Error("构造器需要 name参数");
	// -------------------private start-------------------
	// 私有属性
	var name, age;
	// 私有方法
	function checkAge(age) {

		if (age < 0 || age > 120) {
			throw new Error("invalid Person age");// 简单check
			return false;
		}
		return true;
	}
	// -------------------private end -------------------

	// -------------------public start-------------------
	// 特权方法(privileged methods),能够访问私有属性,需要访问私有属性的方法才设成特权方法
	this.getName = function() {
		return name;
	};

	this.setName = function(newName) {
		name = newName;
		return this;// 能够链式调用
	};

	this.getAge = function() {
		return age;
	};

	this.setAge = function(newAge) {
		checkAge(newAge)
		age = newAge || 20;// 构造器无age参数时,默认值20
		return this;
	};

	this.showInfo = function() {
		return name + "'s" + " age is " + age + " years old.";
	};
	//
	// 构造器
	this.setName(newName);
	this.setAge(newAge);
};

// 公开的不需访问私有属性的方法定义
Person.prototype = {

	method1 : function() {
		// ...
	},
};
// -------------------public end-------------------

 

 

 静态方法的定义

 

window.onload = function() {
	

	Person.staticMethod1();//静态调用
	Person.showPersonNum();
};

/*******************************************************************************
 * class Person
 ******************************************************************************/
var Person = (function() {

	// -------------------private start-------------------
	// private static attributes 私有静态属性
	var numOfPersons = 0;
	var numOfFingers = 10;
	// 私有静态方法

	function showFingerNum() {
		return numOfFingers;
	}

	var ctor = function(newName, newAge) {
		if (newName == undefined)
			throw new Error("构造器需要 name参数 constructor need a name");

		// 私有属性
		var name, age;
		
		// 私有方法(与定义在return外的私有静态方法用法上一样)
		function checkAge(age) {

			if (age < 0 || age > 120) {
				throw new Error("invalid Person age");// 简单check
				return false;
			}
			return true;
		}
		// -------------------private end -------------------

		// -------------------public start-------------------
		// 特权方法(privileged methods),能够访问私有属性,需要访问私有属性的方法才设成特权方法
		this.getName = function() {
			return name;
		};

		this.setName = function(newName) {
			name = newName;
			return this;// 能够链式调用
		};

		this.getAge = function() {
			return age;
		};

		this.setAge = function(newAge) {
			checkAge(newAge);
			age = newAge || 20;// 构造器无age参数时,默认值20
			return this;
		};

		this.showInfo = function() {
			return name + "'s" + " age is " + age + " years old."
					+ showFingerNum();
		};

		// 构造器
		numOfPersons++;
		this.setName(newName);
		this.setAge(newAge);
	};

	// public privileged static method 能够访问私有属性的静态方法;
	ctor.showPersonNum = function() {
		alert("there has "+numOfPersons+" Person been created");
	};
	return ctor;

})();
// public non-privileged static method 公开的不需访问私有属性的静态方法定义
Person.staticMethod1 = function() {
	alert("Person.staticMethod1");
};

// public, non-privileged methods 公开的不需访问私有属性的方法定义
Person.prototype = {
	method1 : function() {
		alert("method1");
	},
	method2 : function() {
		alert("method2");
	}
};
// -------------------public end-------------------
 
分享到:
评论

相关推荐

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

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

    JavaScript面向对象编程指南 pdf

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

    JavaScript面向对象编程指南.pdf

    JavaScript面向对象编程是指在JavaScript语言中使用面向对象的方法来编写程序。JavaScript是一种高级的、解释型的编程语言,它支持面向对象的编程范式,允许开发者创建对象、使用继承和多态等面向对象的特性。以下是...

    JavaScript面向对象编程指南

    JavaScript是一种广泛应用于Web开发的动态编程语言,尤其在构建交互式网页和富互联网应用...《JavaScript面向对象编程指南》这本书将帮助你进一步探索这个主题,通过实例和详细的解释,提升你的JavaScript编程技能。

    基于闭包的JavaScript面向对象编程框架.pdf

    3. 基于闭包的JavaScript面向对象编程框架可以实现类的定义、继承和多态特征。 4. 闭包可以用来指定类的名称、父类、类的静态私有成员和公共成员。 5. 闭包可以用来实现继承,并指定子类和父类之间的关系。 6. 闭包...

    JavaScript面向对象编程案例

    `JavaScript面向对象编程讲解.pptx`可能提供了更详细的理论解释和更多示例,帮助读者深入理解面向对象编程在JavaScript中的应用。 学习JavaScript面向对象编程,不仅有助于理解代码的结构和复用性,还有助于提高...

    javascript面向对象编程(中文).pdf

    ### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...

    JavaScript 面向对象编程

    ### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于一种简单的浏览器脚本环境,但随着时间的发展,它已经演变为一种功能强大的编程语言,...

    JavaScript面向对象编程

    JavaScript是一种广泛应用于Web开发的动态脚本语言,其在创建交互式网页和应用程序时起着核心作用。...阅读《JavaScript面向对象编程.pdf》这份资料,你将能够进一步了解和掌握JavaScript的面向对象编程技巧。

    面向对象JavaScript精要(英文原版pdf)

    - **类**:ES6引入了类的概念,使JavaScript的面向对象编程更加直观。类本质上是对构造函数和原型模式的一种语法糖,提供了更简洁的方式来定义类和子类。 #### 四、本书主要内容概述 本书全面覆盖了面向对象编程的...

    javascript面向对象编程pdf

    总结来说,JavaScript面向对象编程涵盖了从基本原理到实现细节的多个方面,包括但不限于对象、构造函数、原型链、继承以及封装等。本书系统地介绍了这些知识点,并通过实例演示了如何在现代JavaScript中实现OOP,...

    javascript面向对象编程(中文)

    在本“JavaScript面向对象编程”主题中,我们将深入探讨这一概念及其在JavaScript中的应用。 1. **对象和类的概念**:在面向对象编程中,对象是数据和操作这些数据的方法的集合。在JavaScript中,对象是由键值对...

    javascript面向对象编程PDF

    ### JavaScript面向对象编程知识点 #### 一、现代JavaScript的发展与特性 **1.1 JavaScript的演变** - **简史概述**:自诞生以来,JavaScript经历了一系列显著的变化和发展,从最初被视为一个简单的脚本语言,...

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

    ### JavaScript学习深入—面向对象编程 #### 一、JavaScript中的类型概述 JavaScript作为一种动态的、弱类型的语言,其核心特点之一在于它灵活的对象模型。尽管JavaScript的基础架构支持面向对象编程(OOP),但在...

Global site tag (gtag.js) - Google Analytics