js的类?其实还是原型!

 class Point{
constructor(x, y){
this.x = x;
this.y = y;
}
toString(){
return '(' + this.x + ',' + this.y + ')';
}
}

基本点

1. class是关键字,class Point定义了一个“类”。其它变量名不能与类名相同

2. Point的类型(typeof):function,必须通过new来调用

  • class的pototype=>包含在class中所有定义的方法(包括constructor)

    Point.protoype;//{constructor: ƒ, toString: ƒ}

3. 与函数一样,类也可以使用表达式的形式定义

  • var MyPoint = class{};
    var mypoint= new Mypoint();

    不会变量提升:必须先定义才可以使用class

  • name属性(就像函数名),同样的,class后的名称只能在类内部使用
    MyPoint.name;//MyPoint
    var MyPoint2 = class me{};
    MyPoint2.name;//MyPoint2
    mypoint = new me();//报错,me未定义,只能在类内部使用

4. constructor是构造函数

  • 通过new Point来实例化一个对象,且会自动调用class中的contructor
  • 返回值:默认返回实例对象this,可指定其它返回值(与es5相同)
  • 可省略?如果不显式写一个constructor,会自动添加一个空的(与C++相同)
  • Point.prototype.contructor是class,而不是contructor函数
  • var point = new Point();
    console.log(point.constructor===Point);//true

    constructor中的this指向实例化后的对象,与es5中的相同

    console.log(point);//Point {x: undefined, y: undefined}

5. 对象属性的定义:在constructor中用this来添加; 对象方法的定义:在class中直接定义(不加function和逗号)

6. 在class中定义的方法不可枚举

 Object.keys(Point.prototype);//结果为空,说明不可枚举
//es5中可枚举
function Test(){}
Test.prototype.fun1 = function(){};
Object.keys(Test.prototype);//[fun1]可枚举

7. 实例对象

  • 共享一个原型对象(与es5相同)
  • var p1 = new Point();
    var p2 = new Point();
    p1.__proto__ === p2.__proto__;//true

    原型对象的方法可直接在class中添加,那如果要添加属性呢=>getPrototypeOf / Point.prototype上添加

    point.__proto__ === Point.prototype;//true
    var pProto = Object.getPrototypeOf(point);
    pProto.newAttr = 1;
    point.newAttr;//

8. 静态方法和属性(static

  • 它们是属于class,而不属性实例(与C++相同)
  • 静态属性只能在class外由类来添加
  • class StaticClass{
    static constructor(){//定义一个静态方法
    console.log(this);//class{...}
    }
    constructor(){
    console.log(this);//指向实例对象
    }
    }
    StaticClass.attr = 1;//定义一个静态属性

    静态方法中的this指向的是class!

9. new的新属性new.target

  • 函数或class通过new调用,那么在它们内部使用new.target返回自身,否则返回undefined
  • 可以用于区分一个函数是否是通过new调用的
  • function Point1(){
    console.log("new.target结果:", new.target);
    }
    Point1();//undefined
    var p = new Point1();//function Point1(){...}

    在class中使用

    var targetClass = class me{
    constructor(){
    console.log(new.target===targetClass);//true
    console.log(new.target===me);//true
    }
    }
    var tclass = new targetClass();

js——class基础的更多相关文章

  1. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  2. Node.js系列基础学习----安装,实现Hello World, REPL

    Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...

  3. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  4. JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)

    函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) {             return i1 + i2;//如果不写return返回 ...

  5. JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)

    介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂 ...

  6. js复习--基础

    最近工作遇到了一些小困难,基础真的很重要,漫天高楼起于地. 一,script元素 包括type=“text/Javascript”,defer延迟到html加载完解析,src=“../../test. ...

  7. 第八节 JS运动基础

    运动基础 让Div运动起来 速度——物体运动的快慢 运动中的Bug 不会停止 速度取某些值会无法停止 到达位置后再点击还会运动 重复点击速度加快 匀速运动(速度不变) 运动框架及应用: 运动框架: 在 ...

  8. JS零基础一步一步做应用全记录

    1.起因 作为几个外卖重度依赖癌晚期患者,呆宿舍的时候几个人一起叫外卖已经是常事.偶然看到隔壁宿舍在饿了么订餐的时候,看到在饿了么的首页上有一个谁去拿外卖的一个小游戏/工具,感觉这个小细节,饿了么把握 ...

  9. 认识JS的基础对象,定义对象的方法

    JS的基础对象: 1.window       //窗口对象 2.document   //文档对象 3.document.documentElement      //html对象 4.docume ...

  10. 贰、js的基础(一)

    1.js的语法 a.区分大小写 b.弱类型变量:变量无特定类型 c.每行结尾的分号可有可无 d.括号用于代码块 e.注释的方法与c语言和java相同 2.变量 注意事项: a.通过关键字var来声明. ...

随机推荐

  1. 快速学习 javascript

    // js 6种数据类型:字符串.数值.布尔值.undefined.null.object // 三种非数字的数字类型:Infinity -Infinity NaN var str = "H ...

  2. faster rcnn 做识别

    faster rcnn 主要分为四个部分: 1. convolutional part: 特征提取 可以使用vgg,resnet 等等 2.region proposal network: 生成 re ...

  3. oracle 根据在线更新分区。

    LOG_PURCHASEINFO 是没有分区之前的表,根据 LOG_PURCHASEINFO_P 分区好的表在线更新 LOG_PURCHASEINFO表,让他变成分区表.11g才可以使用list_ra ...

  4. Burp Suite Intruder中爆破模式介绍

    Burp Suite Intruder中爆破模式介绍 - Introduction to Burst Mode in Burp Suite Intruder 1.sniper模式  使用单一的Payl ...

  5. jQuery滑动

    通过 jQuery,您可以在元素上创建滑动效果. jQuery 拥有以下滑动方法: slideDown(speed,callback):用于向下滑动元素. slideUp(speed,callback ...

  6. IDEA对新建java线程池的建议

    1 代码片段 ExecutorService pool = Executors.newCachedThreadPool(); 2 建议的三种模板 A 第一种,采用Apache的common.lang3 ...

  7. 贝叶斯网络与LDA

    一.一些概念 互信息: 两个随机变量x和Y的互信息,定义X, Y的联合分布和独立分布乘积的相对熵. 贝叶斯公式: 贝叶斯带来的思考: 给定某些样本D,在这些样本中计算某结论出现的概率,即 给定样本D ...

  8. ES学习

    官方参考手册 https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html https://www.elastic.co ...

  9. Java开发环境配置(5)--Web 服务器--Tomcat--安装过程遇到的问题

    1.参考例子:--- 怎样安装配置tomcat 8_百度经验https://jingyan.baidu.com/article/ff42efa91132a0c19e220208.html 安装与配置T ...

  10. ASP.NET - ADO.NET框架

    ADO.NET(ActiveX Data Objects) ADO.NET是一个COM组件库,用于在使用Microsoft技术的代码中访问数据库. SQL数据操作类 SqlConnection类(Sy ...