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();
五、动态的原型方式