美文网首页
JavaScript模拟类Java面向对象编程

JavaScript模拟类Java面向对象编程

作者: Nisus_Liu | 来源:发表于2018-04-10 11:52 被阅读0次

一个标准的类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)得到的实例区别

image.png
由图可见, 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;
}

相关文章

网友评论

      本文标题:JavaScript模拟类Java面向对象编程

      本文链接:https://www.haomeiwen.com/subject/rcpghftx.html