面向对象的JavaScript

JavaScript定义类的方式有以下几种:

一、通过工厂方法定义类

	function createObject(username, password) {
		var obj = new Object();
		obj.username = username;
		obj.password = password;
		//通过这种方式定义的方法,每创建一个对象就会生成一个方法,这跟Java中同一个类
		//的多个对象共享一个方法是不一样的,也可以将方法定义在外面,但是这就将类和其
		//方法分离开,显得不是很直观
		obj.userInfo = function () {
			alert("UserInfo: \nusername :" + this.username + "\npassword :" + this.password);
		}

		return obj;
	}

	var user = createObject("岂必消无踪", "尘间多少事");
	user.userInfo();

二、通过构造方法

	function Person(username, password, age) {
		this.username = username;
		this.password = password;
		this.age = age;

		this.personInfo = function () {
			
			alert("详细信息:\n用户名:" + username + "\n密码:" + password + "\n岁月:" +age);
		}
	}

	var per = new Person("夜玫瑰", "kitty", 21);
	var per2 = new Person("叶倾城", "meng", 18);
	per.personInfo();
	per2.personInfo();


三、通过原型方式创建类prototype,所有对象共享同一属性

	function Person() {
	
	}
	
	Person.prototype.loc = new Array();
	Person.prototype.nickname = "路是月的痕";
	
	Person.prototype.sayByeBye = function () {
		alert("详细信息:\n用户名:" + this.nickname + "\n所属门派:" + this.loc);
	}

	var per1 = new Person();
	var per2 = new Person();

	per1.loc.push("无名小卒");
	per1.sayByeBye();
	per2.sayByeBye();

四、混合的构造函数与原型方式(推荐定义的方式),可以解决多个对象实例共享同一属性变量的情况,对属性定义采用构造方法方式,方法定义采用原型方式


function Person() {
		this.loc = new Array();
		this.nickname = "尘缘";
	}

	Person.prototype.info = function() {
		alert("详细信息:\n用户名:" + this.nickname + "\n所属门派:" + this.loc);
	}

	
	var per1 = new Person();
	var per2 = new Person();

	per1.loc.push("伤心小箭");
	per2.loc.push("海裳朵朵");
	per2.nickname = "岁考";
	per1.info();
	per2.info();


 


五、动态的原型方式

	function Person() {
		this.nickname = "五竹";
		this.loc = new Array();

		if(typeof Person.flag == "undefined") {
			//alert("ok");
			Person.prototype.info = function () {
				alert("详细信息:\n用户名:" + this.nickname + "\n所属门派:" + this.loc);
			}

			Person.flag = "true";
		}
	}

	var p1 = new Person();
	var p2 = new Person();
	
	p1.loc.push("天一神水");

	p1.info();
	p2.info();


发布了59 篇原创文章 · 获赞 2 · 访问量 36万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章