ITPub博客

首页 > IT职业 > IT生活 > this与class(原型)

this与class(原型)

IT生活 作者:专注的阿熊 时间:2020-12-01 11:53:39 0 删除 编辑

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 属性。跟单网这是完全可以的。 但是要注意:此种方式,仅仅是给对象 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 指针。

样例代码:

<!DOCTYPE html><html>

<head>

<meta charset="utf-8">

<title></title>

</head>

<body>

<script>

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

</script>

</body></html>


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946337/viewspace-2738419/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-23

  • 博文量
    410
  • 访问量
    276752