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();