• javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】


    创建对象

    方式①

    直接使用new Object()

    
      var obj = new Object();
    

    方式②

    使用空的{}大括号

        var obj2 = {};

    测试

    这里写图片描述

    增加属性,访问属性

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

    使用.操作符增加属性

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

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

    测试

    这里写图片描述


    使用.操作符访问属性

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

    测试

    这里写图片描述


    使用[]操作符访问属性

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

    测试

    这里写图片描述


    创建类

    方式①

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

    
            //测试函数
            function test() {
    
                var teacher = new Teacher();
    
            }
    
            //使用function来模拟类
            function Teacher() {
    
            }

    测试

    这里写图片描述


    方式②

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

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

    
            function test() {
    
                var teacher = new Teacher();
    
            }
            var Teacher = function () {
    
    
            };
    

    测试

    这里写图片描述


    方式③

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

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

    测试

    这里写图片描述


    公有属性和方法

    我们创建公有属性应该在类中指定,创建公有方法应该使用原型对象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()方法

    这里写图片描述

    值得注意的是: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);}
    

    如果您觉得这篇文章帮助到了您,可以给作者一点鼓励



  • 相关阅读:
    virtualBox下面安装linux系统如何共享目录
    PHP中spl_autoload_register()函数
    PHP 5.5 新特性
    useradd密码无效
    Linux audit安全审计工具
    Javascript class获取回调函数数据
    RPi 3B 无线连接配置
    Refused to execute inline event handler because it violates the following Content Security Policy directive: "xxx". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...')
    options.html:1 Refused to load the script 'xxxx' because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".
    jQuery.Deferred exception: $.get is not a function TypeError: $.get is not a function
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7203017.html
Copyright © 2020-2023  润新知