Loading

12类的使用

  1 <!doctype html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport"
  6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8     <title>12类的使用</title>
  9 </head>
 10 <body>
 11 <script>
 12     /*说明:
 13     (1) 类(class)其实是一个语法糖的结构,内部其实还是一个函数,所以使用class的声明方式可以让书写面向对象的js代码更加清晰而已。
 14     (2) 把属性放到constructor中,保证每个对象的属性是独有的; 把方法放到原型中,保证每个对象可以共用方法。
 15     (3) 类中的静态属性和静态方法只能使用类来调用。
 16     */
 17     // class User {}
 18     // console.dir(User);
 19     // console.log(User === User.prototype.constructor); // true
 20     // function Hd() {}
 21     // console.dir(Hd);
 22     // console.log(Hd === Hd.prototype.constructor);     // true
 23 
 24     /*12.1 class声明类的语法*/
 25     /* 说明:
 26     (1) 把属性放到constructor中,保证每个对象的属性是独有的。
 27     (2) 把方法放到原型中,保证每个对象可以共用方法。
 28     */
 29     // let User = class {
 30     //     // 为对象初始化值
 31     //     constructor(name) {
 32     //         this.name = name;
 33     //     };
 34     //     getName() {
 35     //         return this.name;
 36     //     };
 37     // };
 38     // console.log(typeof User);    // function
 39     // let liSi = new User("李四");
 40     // console.log(liSi.getName()); // 李四
 41     // console.dir(liSi);
 42 
 43     /*12.2 静态属性使用*/
 44     // 为构造函数创建的属性称为静态属性,静态属性被所有创建的对象所使用(只能使用class修改该属性)。
 45     /*12.2.1 函数中静态属性的使用*/
 46     // function Web(url) {
 47     //     this.url = url;
 48     // }
 49     // let web1 = new Web("baidu.com");
 50     // Web.url = "www.baidu.com";
 51     // console.log(web1, Web.url); // Web{url: 'baidu.com'} 'www.baidu.com'
 52 
 53     /*12.2.2 类中静态属性的使用*/
 54     // class Request {
 55     //    static host = 'www.baidu.com';
 56     //    api(url) {
 57     //        return Request.host + `/${url}`;
 58     //    };
 59     // }
 60     // let obj = new Request();
 61     // console.log(obj);                // Request{}
 62     // console.log(obj.host);           // undefined
 63     // console.log(Request.host);       // www.baidu.com
 64     // console.dir(Request);            // class Request
 65     // console.log(obj.api('article')); // www.baidu.com/article
 66     // Request.host = "www.sina.com";
 67     // obj.host = "www.youtube.com";
 68     // console.log(obj.api('article')); // www.sina.com/article
 69     // console.log(obj);                // Request{host: 'www.youtube.com'}
 70 
 71     /*12.3 在类中使用访问器*/
 72     // 使用访问器控制类中属性的设置
 73     // class Request {
 74     //     constructor(host) {
 75     //         this.data = {};
 76     //         this.host = host;
 77     //     };
 78     //     set host (host) {
 79     //         if (!/^https?:\/\//i.test(host)) {
 80     //             throw new Error('地址错误');
 81     //         }
 82     //         this.data.host = host;
 83     //     };
 84     //     get host () {
 85     //         return this.data.host;
 86     //     };
 87     // }
 88     // let web = new Request("https://www.baidu.com");
 89     // web.host = "https://sina.com";
 90     // console.log(web);
 91     // /*
 92     // Request {data: {…}}
 93     // data: {host: 'https://sina.com'}
 94     // */
 95     // console.log(web.host, web.data.host); // https://sina.com https://sina.com
 96     // console.dir(web);
 97 
 98     /*12.4 private私有属性使用*/
 99     /*12.4.1 没有进行属性保护的公共属性*/
100     // 公共属性在类的内部和外部都可以进行访问。
101     // class User {
102     //     cname = "程序员";
103     //     constructor(name){
104     //         this.name = name;
105     //     };
106     // }
107     //
108     // let liSi = new User("李四");
109     // liSi.cname = "靓仔";
110     // console.log(liSi);     // User{cname: '靓仔', name: '李四'}
111     // let zhangSan = new User("张三")
112     // console.log(zhangSan); // User{cname: '程序员', name: '张三'}
113     // console.dir(User);
114 
115     /*12.4.2 private私有属性*/
116     // 属性只能在类内部进行访问,外部无法进行访问。
117     // class User {
118     //     // 定义私有属性,变量名前加井号(#)
119     //     #cname = "程序员";
120     //     constructor(name) {
121     //         this.name = name;
122     //     };
123     //     set cname (cname) {
124     //         this.#cname = cname
125     //     };
126     //     get cname () {
127     //         return this.#cname;
128     //     };
129     // }
130     // let liSi = new User("李四");
131     // // 修改私有属性时会报错
132     // // liSi.#cname = "靓仔";
133     // // 访问私有属性时会报错
134     // // console.log(liSi.#cname);
135     // console.log(liSi);     // User{name: '李四', #cname: '程序员'}
136     // // 通过访问器访问私有属性
137     // let zhangSan = new User("张三")
138     // console.log(zhangSan); // User{name: '张三', #cname: '程序员'}
139     // zhangSan.cname = "屌丝";
140     // console.log(zhangSan); // User{name: '张三', #cname: '屌丝'}
141 
142     /*12.5 类中静态方法的使用*/
143     // class Request {
144     //    static host = 'www.baidu.com';
145     //    static api(url) {
146     //        return Request.host + `/${url}`;
147     //    };
148     // }
149     // let obj = new Request();
150     // console.log(obj);                    // Request{}
151     // console.log(obj.host);               // undefined
152     // console.log(Request.host);           // www.baidu.com
153     // // console.log(obj.api('article'));     // 报错
154     // console.log(Request.api('article')); // www.baidu.com/article
155     // console.dir(Request);                // class Request
156 
157 </script>
158 </body>
159 </html>

 

posted @ 2022-08-24 14:21  云起时。  阅读(42)  评论(0编辑  收藏  举报