JScript语言——原型与原型链
2020-06-20 本文已影响0人
张先觉
# 原型:prototype属性
、__proto__
、constructor属性
- prototype,只是函数的一个属性(function.prototype),也是我们所说的原型对象。那什么是原型呢?你可以这样理解:每一个JavaScript对象(null除外)在创建的时候,就会关联到另一个对象(prototype),这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。
- 每一个JavaScript对象(除了 null )都具有的一个属性,叫
__proto__
,这个属性会指向该对象的原型。 -
constructor,每个原型都有一个 constructor 属性指向关联的构造函数。
1.png
推理原型链
function Person(){
}
let person1 = new Person();
let person2 = new Person();
// 第一阶段:从构造函数开始推理,清晰prototype属性、constructor属性、__proto__属性
console.log(`构造函数就是一个Function:${Person}`);
console.log(`prototype就是构造函数的属性,指向原型对象:${Person.prototype}`);
console.log(`constructor原型的属性,指向构造函数:${Person.prototype.constructor}`);
console.log(`对象person1、person2共享原型吗?${person1.__proto__ === person2.__proto__}`);
// 第二阶段:提问:是谁实例出的构造函数对象呢?又是谁实例化出构造对象的原型呢?
console.log(`Function.prototype实例化了Person构造函数:${Person.__proto__}`);
console.log(`Object.prototype实例化了Person构造函数的原型对象${Person.prototype.__proto__}`);
// 第三阶段:理清Function()、Function.prototype、Object()、Object.prototype、null
console.log(`Function的__proto__指向Function.prototype:${Person.__proto__.constructor.__proto__ === Person.__proto__}`);
console.log(`Object的__proto__指向Function.prototype:${Person.prototype.__proto__.constructor.__proto__ === Person.__proto__}`);
console.log(`Function.prototype的__proto__指向Object.prototype:${Person.__proto__.__proto__ === Person.prototype.__proto__}`);
console.log(`Object.prototype的__proto__指向null:${Person.prototype.__proto__.__proto__ === null}`);
prototype.png