一个标准的类java的JavaScript类
/*
* 模拟面向对象的标准JavaScript类
*
* 类属性
* 类方法
* 实例属性
* 实例方法
*
*/
//构造函数
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//实例方法
Person.prototype.speak = function (content) {
console.log(this.name + "正在说:" + content);
}
Person.prototype.toString = function () {
//返回属性组成的json串
return '{name:' + this.name + ',age:' + this.age + ',sex:' + this.sex + '}';
}
//类字段 ~=java中静态属性 public static
Person.GOODMAN = new Person('good man', 100, 'male');
Person.MAN = new Person('man', 22, 'male');
Person.WOMAN = new Person('woman', 18, 'female');
//类方法 ~=java中的静态方法 public static
/**
*
* @param {String} personString person实例的json串
*/
Person.parse = function (personString) {
//判断是否时json串
if (!personString.match(Person._jsonReg)) {
throw new TypeError('请传入一个json串');
}
var p = JSON.parse(personString);
//让新创建的对象编程Person类实例
p = new Person(p.name, p.age, p.sex);
console.log(">>Json parse得到的person实例:");
console.log(p);
return p;
}
//类的私有字段(仅通过'_'标识以下, 并不是真的不可见) private static
Person._jsonReg = /^\{([^,]+:[^,]+,*)+\}$/;
测试:
<script type="text/javascript" src="js/person.js"></script>
<script>
var p = new Person('冯三',22,'male');
p.speak('风好大...');
console.log(Person._jsonReg);
console.log(Person.GOODMAN);
console.log(p.GOODMAN); //=> undefined, 实例无法访问类属性
console.log(p.toString());
//console.log(Person.parse('{name:冯三,age:22,sex,male}')); //Uncaught TypeError: 请传入一个json串
console.log(Person.parse('{"name":"冯三","age":22,"sex":"male"}'));
</script>
new Person()
和JSON.parse(personString)
得到的实例区别
由图可见,
JSON.parse(personString)
得到的实例时键:值
形式, 原型指向Object
, i.e.这样并不是得到Person类实例
因此, 目前的Person.parse()
方法并不合理, 合理的应该是返回Person类实例.
Person.parse = function (personString) {
//判断是否时json串
if (!personString.match(Person._jsonReg)) {
throw new TypeError('请传入一个json串');
}
var p = JSON.parse(personString);
console.log(">>Json parse得到的person实例:");
console.log(p);
return p;
}
改为:
Person.parse = function (personString) {
//判断是否时json串
if (!personString.match(Person._jsonReg)) {
throw new TypeError('请传入一个json串');
}
var p = JSON.parse(personString);
//让新创建的对象编程Person类实例
p = new Person(p.name, p.age, p.sex);
console.log(">>Json parse得到的person实例:");
console.log(p);
return p;
}