class :类,是对象的模板。(或者叫:原型) this :当前对象。 以上定义,与 java 中的概念是相同的。 但是,由于 javascript 语言自身的特点,关于 class 与 this ,还需要做进一步说明。
注意:在javascript 中,在定义类完毕之后,还可以再添加属性和方法。
属性与方法添加到this 上
class Point {
constructor() { }}let p = new Point();
p.username = 'zhangsan';
console.log(p.username); //zhangsan
上面代码中,Point 类定义之后,给对象 p 又添加了一个 username 属性。跟单网www.gendan5.com这是完全可以的。 但是要注意:此种方式,仅仅是给对象 p 添加一个属性,而不是给类添加一个属性。 或者说: 此种方式,仅仅是给对象 p 的 this 添加一个属性,而不是给类添加一个属性。
class Point {
constructor() { }}let p1 = new Point();
p1.username = 'zhangsan';
console.log(p1.username); //zhangsan
let p2 = new Point();
console.log(p2.username); //undefined
上面例子中,只给对象p1 添加了 username 属性,但没有给类添加属性。 所以, p2 对象中并没有 username 属性。
属性与方法添加到类上
class Point {
constructor() { }}
Point.prototype.username = 'zhangsan';
let p1 = new Point();
console.log(p1.username); //zhangsan
let p2 = new Point();
console.log(p2.username); //zhangsan
上面代码中,使用 Point.prototype 方式,给类添加属性。 这样,类的所有对象( p1 、 p2 )就都有 username 属性了。
在javascript 中,每一个类都有一个 prototype ,它就是类的原型,类的所有实例共享一个原型。如果想访问这个原型,可以使用 proto 指针。
样例代码:
class Point {
constructor() { }
}
let p = new Point();
console.log(p.__proto__); // 注意 proto 指针的写法
/**
* 输出结果:
* {constructor: ƒ}
* constructor: class Point // 这里证明: proto 指针指向类的原型
* __proto__: Object
*/
let p1 = new Point();
let p2 = new Point();
// 这里证明:类的所有实例共享一个原型
console.log(p1.__proto__===p2.__proto__); //true