要想学class, 首先要知道实例 原型 this 等相关知识。
什么是this?
this是函数体运行时所在环境的对象(也就是说this是对象);
①函数体运行(this是在函数体内运行的)
② this指向的是对象, 以往我们讨论的this指向问题,也就是在讨论this指向哪个对象。
例如函数作为对象中的方法使用,那么this就指向该对象。
什么是实例?
实例就是初始化之后的对象;
例如 let b = {} b.age = 1;
上面的两步操作 b也就一个实例化的对象。 b是初始值对象,然后往b上面添加age属性就成了实例对象。
只不过这种实例化,有些缺点 ①初始值语义不明显 ② 原型对象与实例对象关系不明确。
为了解决这一问题 new命令出现了
通过函数的方式加上new命令解决上述的两个问题
function b (){this.x = 1} let a = new b();
a就是实例。b与a之间的关系看起来就比较明确了。
类的基本语法
1.基本用法
class name { }
在类中所有定义的方法都会放在原型上,也就是prototype属性上。
以往放在原型上是需要借助与 prototype;
例如 function b (){...} // 构造函数 let a = new b();//实例化 a.prototype.age = function(){...}; //往原型上添加方法
现在只需要
class name { age(){...}};
注意点 在类中所有定义的方法都会放在原型上。 如果是属性会放在实例上。
2.constructor()
constructor 方法默认返回实例本身, 也就是如果在constructor中使用this,this会指向实例。
3.get 与set
与definedProperty方法一样, 给某个属性设置get与set。 class中也是一样的, 给实例中某个属性设置get与set。
4. 静态方法与静态属性
静态的作用是: 定位一个属性与方法只能在以class来使用, 不能被实例所继承。
关键词static来声明。
例如
class point { static name = 1;} 使用方法 point.name 如果实例化之后,在实例上是找不到name的
5. 私有属性与私有方法
私有的作用是: 只能在类的内部使用(实例化之后)。
关键词 # 例如# 定义的属性或方法只能在内部使用。
6. 静态块
静态块的作用是初始化静态属性。
可以用函数的方式来去定义静态属性,且只需要之一次。
7. new.target
在class内部使用,如果是用new命令调用的 new.target会返回类本身,否则会返回undefind
此方法主要是判断当前是否是通过new命令来调用。