zoukankan      html  css  js  c++  java
  • ES6里class杂乱随笔

    这是一篇乱七八糟的随笔。
    class是ES6新增的特性,用于解决JavaScript没有类的困惑。

    --杂谈

    ES5及之前,类都是用函数来替代,包括实例。

    如:

     1 function Person(name) {
     2     // this指向实例
     3     this.name = name
     4     this,,log = function () {
     5         console.log('name is ' + name)
     6     }
     7 }
     8 
     9 // 或者
    10 Person.prototype.changeName = function (name) {
    11     this.name = name
    12     console.log('new name is ' + name)
    13 }
    14 
    15 var p = new Person(‘zhangsan’)
    16 p.name // zhangsan
    17 p.log() // name is zhangsan
    18 p.changeName('lisi')  // new name is Lisi

    class本质上是function的语法糖,不过class的写法更加清晰可见,也更符合面向对象。

    由于本质是语法糖,所以偶尔会遇到比如Class转function,function转Class的题目

    上面转为class代码如下

     1 class Person {
     2     // constructor是类的构造函数
     3     constructor (name) {
     4         this.name = name
     5     }
     6     log () {
     7         console.log(`name is ${this.name}`)
     8     }
     9     changeName(name) {
    10         this.name = name
    11         console.log(`new name is  ${this.name}`)
    12     }
    13 } 
    14 
    15 
    16 var p = new Person('zhangsan');  // 上同

    相比函数来声明更加清晰易懂。

    class本质也是函数

    typeof Person // functionA

    类的所有方法都定义在prototype上面

     所有上诉的类其实等同于下

    Person,prototype = {
         log () {...},
         changeName(name) {...}
    }

    类里的内容,除非使用this来表示,则表示内容在实例上,否则都是属于类。

    实例在调用方法时候,其实就是调用类上面的原型方法。

    p.constructor === Person.prototype.constructor
    // p 表示Person的实例
    p.hasOwnProperty('name') // true
    p.hasOwnProperty('log') // false
    p.__proto__.hasOwnProperty('log') // true

    类的所有实例共享一个原型对象,所以

    p1.__proto__ = p2.__proto__
    还可以通过__proto__来增加类的方法
    p.__proto__.printName = function () { return this.name };zha
    
    

    当然这样声明不好,会使得逻辑变得混乱,增加的时候也需要很谨慎,同时不方便管理

    -- 其他

    class还有许多新的特性,比如支持getter和setter

    如:

    get 和 set

    静态属性,静态方法(只能在类内部使用)

    私有属性,通过 #  来声明,如 #count

    本来想写许多,想想还是不用记录那么多,主要用于作于记录之用,需要详细还是阅读ES6比较轻松。

    一个热爱编程的猴子,感谢与你相遇。

    知识就像海洋,搁浅都不一定能见到彼岸。

    共勉。

    以梦为马
  • 相关阅读:
    Unity3D 学习笔记一
    Java 常用类 -Math
    Java 常用类 -String VS StringBuffer
    Java 日期类 Calendar SimpleDateFormat
    Java 日期类 Calendar
    Java异常处理-自定义异常
    Java异常处理-Exception 和 RuntimeException 区别
    Java异常处理-throws和throw关键字
    Java异常处理-捕获和处理异常
    Java异常处理-异常的概念
  • 原文地址:https://www.cnblogs.com/lsAxy/p/12913273.html
Copyright © 2011-2022 走看看