ES6 - class的学习

http://es6.ruanyifeng.com/#docs/class

class Person {
	constructor{
		//构造函数,里边放不被继承的私有属性和方法
		this.property1 = '第一个私有属性';
		//属性结尾用分号
	}
	//不写在constructor里边的属性和方法都是写在了prototype原型上:
	Func1() {
	}
	Fun2() {
		//多个方法之间不用逗号隔开,加了逗号反而是错的
	}
}
class PersonCild extends Person {
	//extends实现继承
}

报错: missing super() call in constructor ??//在构造函数中缺少super()调用 这个时候就是要在constructor里边单独写一行super();调用,

其他需要记忆的知识点:
类的数据类型就是函数,类本身就是函数
在类的实例上面调用方法,其实就是调用原型上的方法
类的原型上的constructor就是类本身
尽量不要用__proto__在实例对象上给类原型添加方法,应用object.getPrototypeOf
class表达式,给类命名,可以查找当前类:如下
const Myclass = class Me{
	protoFun(){
		return  Me.name  //Me
	}
}
class没有变量提升
let也没有变量提升
类相当于实例的原型,所有在勒种定义的方法,都会被实例继承
类(动态)方法内的this,默认执行类的实例
静态方法中的this指的是类,动态方法中的this默认指的是实例
如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称之为“静态方法”,就是加上static后方法只能用类的名字来调用,实例就调不找了
静态方法可以与非静态方法重名。
父类的静态方法,可以被子类继承。
子类 的静态方法可以和父类的静态方法重名,重名后在子类的静态方法里边可以用super.方法名()调用父类的同名静态方法
私有方法:只能类内部使用,
利用Symbol的唯一性
const bar = Symbol('bar');
export default class myClass{
	[bar](bar){
		return '私有方法'
	}
}
实例属性: 定义在实例对象(this)上的属性
静态属性: 定义在class本身的属性
写法:
class 类名{
	constructor{
		this.属性B = 属性值;
	}
};
类名.属性A = 属性值;
这里,属性A就是静态属性,定义在类的外部
class
constructor
new target 返回new命令作用于的那个构造函数 var 实例 = new 函数A,则new target代表函数A
类名.name
get
set
static 静态方法
super 代表父类的构造函数  返回父类实例,子类必须在constructor方法中调用super方法,因为子类实例的构建,基于对父类实例的加工
obj.getPrototypeOf(zilei) === fulei;得到子类的父类
类的__proto__和prototype属性
es5中,__proto__指向构造函数的prototype属性
es6中:
子类的__proto__属性,表示构造函数的继承,总是指向父类
子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性
B.prototype.__proto__ = A.prototype;
B.__proto__ = A;
这两条继承链,可以这样理解:
作为一个对象,子类(B)的原型(__proto__属性)是父类(A);
作为一个构造函数,子类(B)的原型对象(prototype属性)是父类的原型对象(prototype属性)的实例。
实例的__proto__属性
子类原型的原型,是父类的原型:子类实例.__proto__.__proto__ = 父类实例.__proto__
因此:
通过子类实例的__proto__.__proto__属性,可以修改父类实例的行为。
原生构造函数:
是指js语言内置的构造函数,如下:
Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏wym

运算符重载(超详细)

C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋...

18420
来自专栏一“技”之长

Swift讲解专题七——函数 原

        函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一...

7830
来自专栏机器学习和数学

[编程经验] Python 字符串的几种判断方法

Python处理字符串类型功能真的是很强大,遇到了一些我没用过的方法,感觉挺好用的,就写在这里,供大家参考。 s.isalnum() 所有字符都是数字或...

26840
来自专栏吾爱乐享

java之学习Integer类相关面试题

14740
来自专栏程序员互动联盟

【Java概念学习】--数组的初始化

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,...

348110
来自专栏『不羁阁』 | 行走少年郎专栏

OC知识--类方法、对象方法介绍及区别

20740
来自专栏学海无涯

19.Swift学习之构造函数与析构函数

11630
来自专栏北京马哥教育

Python Re 模块最全解读: 11703 字帮你彻底掌握

re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA...

346100
来自专栏待你如初见

Day04

17240
来自专栏Vamei实验室

Java进阶04 RTTI

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。 ...

21370

扫码关注云+社区

领取腾讯云代金券