this與class(原型)

class:類,是對象的模板。(或者叫:原型) this:當前對象。 以上定義,與java中的概念是相同的。 可是,因爲javascript語言自身的特色,關於class與this,還須要作進一步說明。
注意:在javascript中,在定義類完畢以後,還能夠再添加屬性和方法。
屬性與方法添加到this上
class Point {javascript

constructor() { }}let p = new Point();

p.username = 'zhangsan';
console.log(p.username); //zhangsan
上面代碼中,Point類定義以後,給對象 p 又添加了一個username屬性。這是徹底能夠的。 跟單網www.gendan.com可是要注意:此種方式,僅僅是給對象p添加一個屬性,而不是給類添加一個屬性。 或者說: 此種方式,僅僅是給對象p的this添加一個屬性,而不是給類添加一個屬性。
class Point {html

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 {java

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方式,給類添加屬性。 這樣,類的全部對象(p一、p2)就都有username屬性了。
在javascript中,每個類都有一個prototype,它就是類的原型,類的全部實例共享一個原型。若是想訪問這個原型,能夠使用proto指針。
樣例代碼:
<!DOCTYPE html><html>this

<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>
相關文章
相關標籤/搜索