Javascript类(对象)定义问题

来源:互联网 发布:石家庄淘宝详情图拍照 编辑:程序博客网 时间:2024/06/06 06:47

       在面向对象编程中,类是对象的模板,定义了同一组对象(另一说法,又称“实例”)共有的属性和方法。Javascript语言不支持“类”,但是可以使用一些变通的方法来模拟出类。Javascript中定义类有三种方式,下面就简单说一下。

       方式一: 构造函数法

       这是Java语言学习中,教科书上必教的方法。如下面的一段代码:

function Student(stuNo, stuName){      this.stuNo = stuNo;      this.stuName = stuName;}
生成实例的时候,使用new关键字,如:var stu = new Student("stu00001", "小柿子"); 另外类的属性和方法还可以定义在构造函数的prototype对象之上,如下代码:

Student.prototype.study = function(){       console.log("I'm studying");}
这种方式用到了this和prototype对象,不易阅读,编写也较复杂。

      方式二:Object.create()法

      为了方便生成对象,出现了Object.create()对象法。原理是根据“类”就是一种对象,而不是函数。如下面的一段代码:

var student = {     stuNo: 'stu0001',     stuName: '小柿子',     study: function(){            console.log("I'm studying");     }};var stu = Object.create(student);console.log(stu.stuName);stu.study();
这种方式是不是比较第一种方式,更加灵活了吧,而且阅读性也不错吧。这种方法虽然简单,但是不能实现私有属性和私有方法,实例直接也不能共享数据,对“类”的模拟不够全面。

      方式三:极简主义法

     这种方法,不用使用this和prototype对象,也不用使用Object.create()法来生成对象。下面直接看代码:

var student =  {    newInstance: function(){        var stu = {            stuNo: 'stu0006',            stuName: 'erbin',            study: function(){                 console.log("I'm studying");            }                     };        return stu;    }}var stu = student.newInstance();stu.study();
使用这种方式, 类的继承也比较简单了,如下:

var address = {   newInstance: function(){       var addr = {          getAddr: function(){console.log("山东省菏泽市")}       };       return addr;   };};var student =  {    newInstance: function(){        // 继承        var stu = address.newInstance();        stu.stuName = 'erbin';        stu.study = function(){            console.log("I'm studying");        };        return stu;    }}var stu = student.newInstance();stu.getAddr(); //获取学生erbin的地址
对于私有属性和方法,只用你不把属性和方法定义在stu对象上面,都是私有的。

    大家看了这个是不是了解了呢。