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