javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】 创建对象 增加属性,访问属性 创建类 公有属性和方法 私有属性 静态属性和方法

方式①

直接使用new Object()


  var obj = new Object();

方式②

使用空的{}大括号

    var obj2 = {};

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法

增加属性,访问属性

我们要为创建的对象增加属性和访问属性的值

使用.操作符增加属性

JavaScript是弱类型的语言,可以动态的添加属性。


    obj.age = 20;
    obj.name = "zhongfucheng";
    obj.say = function () {
        alert("hello");
    };

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


使用.操作符访问属性


    var aa = obj.age;
    var bb = obj.name;

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


使用[]操作符访问属性


    var aa = [obj["age"]];
    var bb = [obj["name"]];

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


创建类

方式①

使用function来模拟创建类,function充当了构造函数


        //测试函数
        function test() {

            var teacher = new Teacher();

        }

        //使用function来模拟类
        function Teacher() {

        }

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


方式②

上面的function来模拟类很容易和函数混淆。

我们一般这样做:用一个变量记住一个匿名的function当做是类,function充当了构造函数


        function test() {

            var teacher = new Teacher();

        }
        var Teacher = function () {


        };

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


方式③

使用JSON语法来创建类,也就是对象直接量定义方法



        var obj = {
            age: 20,
            str: "zhongfucheng",
            method:function () {
                alert("aaa");
            }

        };

测试

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法


公有属性和方法

我们创建公有属性应该在类中指定,创建公有方法应该使用原型对象prototype

prototype定义的属性就类似于Java的静态成员:在原型对象上定义了属性,拥有这个原型对象的function所创建的对象也拥有定义的属性!所以,我们方法中就使用prototype


        var obj = function Teacher(name) {
            this.name = name;
            if( typeof obj._init=="undefined") {
                obj.prototype.setName = function (name) {
                    this.name = name;
                };

                obj.prototype.getName = function () {
                    alert(this.name);
                };
            }

            obj._init = true;
        };

创建两个不同的Teacher对象,name属性是不一样的。而它们共享同一份setName()和getName()方法

javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】
创建对象
增加属性,访问属性
创建类
公有属性和方法
私有属性
静态属性和方法

值得注意的是:prototype定义的属性只可读的。如果你想要使用具体对象写prototype的属性,实际上并不是写,而是重新为该类定义了一个同名(和prototype同名)的属性。在读取同名属性的时候,优先读取对象上的属性,而不是prototype的。


私有属性

我们在Java中,定义私有属性是通过关键字private来修饰的。。

在JavaScript中是没有这样的关键字的,我们需要这样做:定义在方法内【也就是function内部,也可以看作成构造函数】的变量,就是私有变量。


        var obj = function Teacher(name) {

            //这是私有属性,外界不能访问
            var age = 23;

            //这是公有属性,外界可以访问
            this.name = name;

            //想要访问私有变量age,只能在这里编写方法来访问。其余的地方都不行!

            //我们通常就是在这里编写公有方法来访问私有属性

        };

静态属性和方法

在JavaScript中定义静态属性其实就是通过prototype原型对象来定义的

定义静态的时机:

  • 当类的某个值与对象无关期望所有位置看到的结果是一样的时候,就可以定义为类静态属性
  • 如果类的一个方法做的是和具体对象无关的操作,而是做一些工作操作的时候,就可以将这个方法定义为静态的类方法
    //静态属性TYPE
    Book.TYPE = “IT”;

    Book.print = function(){alert(Book.TYPE);}