关于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>

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理