美文网首页
js的原型链继承this、prototype、__proto__

js的原型链继承this、prototype、__proto__

作者: 别老说我好看丶害羞 | 来源:发表于2018-11-14 23:14 被阅读0次

    纯代码实现就啰嗦一句,你把它们手打一遍,不理解你打我!

    /**
     * 被实例化对象
     */
    function superClass() {
        var a = 'aa';
        // 通过 this 创建的共有属性 在被实例化时候每个实例化对象都会创建这个this的属性 this相当于一个变量 指向实例化的对象,未被实例化时指向全局
        this.b = 'bb';
        this.printA = function () {
            console.log(a, 'super printA');
        }
    }
    
    // 通过prototype创建的属性是原型链上的只有本对象这一份 被实例化对象公用
    superClass.prototype.printB = function () {
        console.log(this.b , 'super printB')
    }
    
    /**
     * 实例化对象
     */
    var subClass = new superClass();
    console.log(superClass.prototype.constructor, 'superClass prototype constructor'); // superClass 
    console.log(subClass.__proto__.constructor, 'subClass __proto__ constructor');     // superClass 
    
    // 实例化对象的__proto__ 指向被实例化对象的原型prototype,对象的原型的construct指向对象自己
    console.log(subClass.__proto__ === superClass.prototype); // true
    console.log(superClass.prototype.constructor === superClass); // true
    
    // 总结:
    // 1、this 和 prototype的区别就是 当实例化对象自身需要这个属性时用被实例化对象的属性this,
    // 当公用一个被实例化对象的属性时,被实例化对象的属性用 prototype。
    // 2、原型链指向
    // subClass.__proto__ => superClass.prototype
    // superClass.prototype.constructor => superClass
    
    

    相关文章

      网友评论

          本文标题:js的原型链继承this、prototype、__proto__

          本文链接:https://www.haomeiwen.com/subject/hgosfqtx.html