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

2018-11-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

上一篇下一篇

猜你喜欢

热点阅读