js的原型链继承this、prototype、__proto__、constructor 代码来说话

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

/**
 * 被实例化对象
 */
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容