乐趣区

关于javascript:this与class原型

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.gendan.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 指针。
样例代码:
<!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>
退出移动版